Cómo arreglar el error; 'Error: la información sobre herramientas de Bootstrap requiere Tether (http://github.hubspot.com/tether/)'


176

Estoy usando Bootstrap V4 y el siguiente error se registra en la consola;

Error: la información sobre herramientas de Bootstrap requiere Tether ( http://github.hubspot.com/tether/ )

He intentado eliminar el error instalando Tether pero no ha funcionado. He 'instalado' Tether incluyendo las siguientes líneas de código;

<link rel="stylesheet" href="http://www.atlasestateagents.co.uk/css/tether.min.css">
<script src="http://www.atlasestateagents.co.uk/javascript/tether.min.js"></script>

¿He 'instalado' la correa correctamente?

¿Alguien puede ayudarme a eliminar este error?

Si desea ver el error en mi sitio, haga clic aquí y cargue su consola.


Hola, ¿puedes publicar el código que usas? sería mejor si pudieras poner el código en jsfiddle o en otro lugar.
kucing_terbang

No hay un código real para publicar, pero si visita www.atlasestateagents.co.uk y ve la consola, verá el error de JavaScript.
Michael LB

Utilicé estas líneas de código exactas y me quitaron el error en V3, para cualquiera que se pregunte sobre esa versión.
William

@MichaelLB, en lugar de un enlace a su sitio web, recomendaría poner algunos fragmentos de código aquí, dentro de la pregunta en sí, si su sitio web se actualizará y perderá la actualidad.
Farside

Respuestas:


239

Para Bootstrap 4 estable:

Dado que Beta Bootstrap 4 no depende de Tether sino de Popper.js . Todos los scripts ( deben estar en este orden):

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>

Consulte la documentación actual para obtener las versiones de script más recientes.


Solo Bootstrap 4 alpha:

Bootstrap 4 alpha necesita Tether , por lo que debe incluir tether.min.js antes de incluir bootstrap.min.js, por ejemplo.

<script src="https://npmcdn.com/tether@1.2.4/dist/js/tether.min.js"></script>
<script src="https://npmcdn.com/bootstrap@4.0.0-alpha.5/dist/js/bootstrap.min.js"></script>

1
Fijo, gracias! Sin embargo, ¿arreglar eso condujo a una nueva advertencia, tal vez por una nueva pregunta? mutating the [[Prototype]] of an object will cause your code to run very slowly; instead create the object with the correct initial [[Prototype]] value using Object.create'
Michael LB

¡Excelente! Creo que el error que está recibiendo proviene de la bootstrap.min.jsbiblioteca. ¿Sigue apareciendo si lo comentas? Sí, publicaría una nueva pregunta si Google no tiene una solución. :)
adilapapaya

Considere usar npmcdn para vincular a paquetes publicados en npm, ya que algunas personas tienden a eliminar los archivos build / dist de github. https://npmcdn.com/tether@1.2.4/dist/yhttps://npmcdn.com/bootstrap@4.0.0-alpha.2/dist/
eddywashere

2
pero es extraño, v4-alpha.getbootstrap.com no dice nada al respecto
Maksym Semenykhin

Lo hace en la versión aplha.3. Acabo de tener este error. Creo que tether ahora se descarga como un paquete y ya no está incluido. Por lo tanto, también deberá incluir este script.
Tim Vermaelen

19

Si estás usando Webpack:

  1. Configure el cargador de arranque como se describe en los documentos;
  2. Instale tether.js a través de npm;
  3. Agregue tether.js al complemento ProvidePlugin del paquete web.

webpack.config.js:

plugins: [
        <... your plugins here>,
        new webpack.ProvidePlugin({
            $: "jquery",
            jQuery: "jquery",
            "window.jQuery": "jquery",
            "window.Tether": 'tether'
        })
    ]

Fuente


¿Es esto todo lo que necesitas? Estoy haciendo esto y no funciona.
Henry

9
Como mencioné en el tema de Github, las versiones más nuevas de Bootstrap (por ejemplo, 4.0.0-alpha.6) ahora buscan "Tether" en lugar de "window.Tether".
ThePadawan

18

Si está utilizando npm y browserify:

// es6 imports
import tether from 'tether';
global.Tether = tether;

// require
global.Tether = require('tether');

14

Personalmente, utilizo un pequeño subconjunto de la funcionalidad Bootstrap y no necesito adjuntar Tether.

Esto debería ayudar:

window.Tether = function () {
  throw new Error('Your Bootstrap may actually need Tether.');
};

1
Entonces, ¿qué propones para cortar estas líneas? no es bueno, ya que no debe modificar proveedores y librerías de terceros , le impedirá realizar actualizaciones más adelante. Si no usa estos componentes de Bootstrap como dice, ¿por qué necesitaría Tether ... así que realmente no entiendo el valor de su entrada?
Farside

1
La advertencia de Tether se muestra incluso, si no utiliza la funcionalidad de arranque que requiere Tether. Mi solución esconde mensajes molestos en la consola.
Cezary Daniel Nowak

2
Y este cambio no está actualizando los scripts de terceros o proveedores. Puede agregarlo arriba <script src = "bootstrap.js">
Cezary Daniel Nowak

Realmente no te entiendo, ¿por qué no solo una línea entonces, por igual window.Tether = window.Tether || {};? Además, hay una advertencia en su solución, que puede borrar la dependencia ya definida en un ámbito global, si el módulo se cargará antes de que se ejecute su cosa.
Farside

55
Este es un truco para una versión alfa de Bootstrap. No veo razón para ser exigente :-) Si el desarrollador no quiere usar Tether, no es un caso borrar la dependencia ya definida. Y en mi opinión window.Tether = window.Tether || {};es peor porque arrojará Tether is not a function, en lugar de un error significativo.
Cezary Daniel Nowak

10

Si desea evitar el mensaje de error y no está utilizando la información sobre herramientas de Bootstrap, puede definir window.Tether antes de cargar Bootstrap.

<script>
  window.Tether = {};
</script>
<script src="js/bootstrap.min.js"></script>

Esto funcionó bien para mí ... en mi caso estoy usando angular con bootstrap. ¡Gracias!
MizAkita

Funcionó, agregué lo mismo en mi archivo, funciona bien ahora. Gracias por esta idea. window.Tether = {}; define(['tether'], function (Tether) { return window.Tether = Tether; });
Ehsan Aghaei

8

Deberías hacer mi guía:
1. Agregar la fuente de abajo en Gemfile

source 'https://rails-assets.org' do
  gem 'rails-assets-tether', '>= 1.1.0'
end
  1. Ejecutar comando:

    paquete de instalación

  2. Agregue esta línea después de jQuery en application.js.

    // = requiere jquery
    // = requiere atadura

  3. Reinicie el servidor rails.


7

Instale la correa a través de npm como a continuación

npm install tether --save-dev

luego agregue la correa a su html arriba de bootstrap como a continuación

<script src="node_modules/tether/dist/js/tether.min.js"></script>
<script src="jspm_packages/github/twbs/bootstrap@4.0.0-alpha.2/js/bootstrap.js"></script>

2
o bower como estebower install tether --save-dev
Farside

13
¿No debería ser en npm install tether --savelugar de --save-dev? Será necesario también en producción.
siannone

7

Para webpack resolví esto con webpack.config.js:

new webpack.ProvidePlugin({
  $: 'jquery',
  jQuery: 'jquery',
  "window.jQuery": "jquery",
  Tether: 'tether'
})


3

Usando webpack usé esto en webpack.config.js:

var plugins = [

    ...

    new webpack.ProvidePlugin({
        $: "jquery",
        jQuery: "jquery",
        'window.jQuery': 'jquery',
        'window.Tether': 'tether',
        tether: 'tether',
        Tether: 'tether'
    })
];

Parece que Tetherera lo que estaba buscando:

var Tooltip = function ($) {

  /**
   * Check for Tether dependency
   * Tether - http://tether.io/
   */
  if (typeof Tether === 'undefined') {
    throw new Error('Bootstrap tooltips require Tether (http://tether.io/)');
  }

Gracias que funcionó, sugeriría que tether: 'tether',
editaras

Tienes razón, pero como ejemplo, creo que ilustra el hecho de que se requiere un nombre exacto.
Henry

2

Estaba teniendo este problema con requirejs usando la nueva versión boostrap 4. Terminé simplemente definiendo:

<script>
  window.Tether = {};
</script>

en mi etiqueta de cabeza html para engañar el cheque de bootstrap. Luego agregué una segunda declaración require justo antes del require que carga mi aplicación y, posteriormente, mi dependencia bootstrap:

require(['tether'], function (Tether) {
  window.Tether = Tether;
});

require([
  "app",
], function(App){
  App.initialize();
});

Usando ambos en tándem y no debería tener ningún problema con el actual bootstrap 4 alpha build.


2

Funciona para generator-aspnetcore-spa y bootstrap 4.

// ===== file: webpack.config.vendor.js =====    
module.exports = (env) => {
...
    plugins: [
        new webpack.ProvidePlugin({ $: 'jquery', 
                                    jQuery: 'jquery',
                                    'window.jQuery': 'jquery',
                                    'window.Tether': 'tether',
                                    tether: 'tether', 
                                    Tether: 'tether' }), 
// Maps these identifiers to the jQuery package 
// (because Bootstrap expects it to be a global variable)
            ...
        ]
};

Suficientes solo tres: ... nuevo paquete web. ProvidePlugin ({$: 'jquery', jQuery: 'jquery', Tether: 'tether'}), ...
Mentor

1

Para el paquete web 1 o 2 con Bootstrap 4 necesitas

new webpack.ProvidePlugin({
   $: 'jquery',
   jQuery: 'jquery',
   Tether: 'tether'
})

1

Si está utilizando Brunch, puede agregar esto al final de su brunch-config.js:

npm: {
    enabled: true,
    globals: {
        $: 'jquery', jQuery: 'jquery', 'Tether': 'tether'
    }
}

1

Si usa require.js AMD loader:

// path config
requirejs.config({
  paths: {
    jquery: '//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/core.js',
    tether: '//cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min',
    bootstrap: '//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/js/bootstrap.min',
  },
  shim: {
    bootstrap: {
      deps: ['jquery']
    }
  }
});

//async loading
requirejs(['tether'], function (Tether) {
  window.Tether = Tether;
  requirejs(['bootstrap']);
});

Esto realmente me ayudó. Estuve atrapado en esto durante siglos, no me di cuenta de que podía anidar las llamadas requeridas. Voto a favor para usted, señor.
grimdog_john

1

Para los usuarios de Laravel Mix que ejecutan Bootstrap4, deberá ejecutar

npm installer tether --save

Luego, actualícelo resources/assets/js/bootstrap.jspara cargar Tether y llevarlo al objeto de la ventana.

Así es como se ve el mío: (Tenga en cuenta que también tuve que correr npm install popper.js --save)

window.$ = window.jQuery = require('jquery');
window.Popper = require('popper.js').default;
window.Tether = require('tether');
require('bootstrap');

0

Para agregar a la respuesta de @ adilapapaya. Para ember-cliusuarios específicamente, instale tethercon

bower install --save tether

y luego inclúyalo en su ember-cli-build.jsarchivo antes de bootstrap, así:

// tether (bootstrap 4 requirement)
app.import('bower_components/tether/dist/js/tether.min.js');

// bootstrap
app.import('bower_components/bootstrap/scss/bootstrap-flex.scss');
app.import('bower_components/bootstrap/dist/js/bootstrap.js');

0

Y si usa webpack, necesitará el complemento de exposición. En su webpack.config.js, agregue este cargador

{
   test: require.resolve("tether"),
   loader: "expose?$!expose?Tether"
}

0

Tuve el mismo problema y así es como lo resolví. Estoy sobre rieles 5.1.0rc1

Asegúrese de agregar requieren jquery y tether dentro de su archivo application.js, deben estar en la parte superior de esta manera

//= require jquery
//= require tether

Solo asegúrate de tener la correa instalada


0

Método n. ° 1 : descargue desde aquí e insértelo en sus proyectos, o
Método n. ° 2 : use el código siguiente antes de la fuente del script de arranque:

<script src="https://npmcdn.com/tether@1.2.4/dist/js/tether.min.js"></script>

0

Recomiendo seguir las instrucciones en la documentación de Bootstrap 4 :

Copie y pegue la hoja de estilo <link>en su <head>antes de todas las otras hojas de estilo para cargar nuestro CSS.

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous">

Agregue nuestros complementos de JavaScript, jQuery y Tether cerca del final de sus páginas, justo antes de la etiqueta de cierre. Asegúrese de colocar jQuery y Tether primero, ya que nuestro código depende de ellos. Si bien utilizamos la construcción delgada de jQuery en nuestros documentos, la versión completa también es compatible.

<script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>

0

Solución UMD / AMD

Para aquellos tipos, que lo están haciendo a través de UMD , y compilan a través de require.js, hay una solución lacónica.

En el módulo, que requiere tethercomo dependencia, que se carga Tooltipcomo UMD, frente a la definición del módulo, simplemente ponga un fragmento corto en la definición de Tether:

// First load the UMD module dependency and attach to global scope
require(['tether'], function(Tether) {
    // @todo: make it properly when boostrap will fix loading of UMD, instead of using globals
    window.Tether = Tether; // attach to global scope
});

// then goes your regular module definition
define([
    'jquery',
    'tooltip',
    'popover'
], function($, Tooltip, Popover){
    "use strict";
    //...
    /*
        by this time, you'll have window.Tether global variable defined,
        and UMD module Tooltip will not throw the exception
    */
    //...
});

Este breve fragmento al principio, en realidad, puede colocarse en cualquier nivel superior de su aplicación, lo más importante: invocarlo antes del uso real de bootstrapcomponentes con Tetherdependencia.

// ===== file: tetherWrapper.js =====
require(['./tether'], function(Tether) {
    window.Tether = Tether; // attach to global scope
    // it's important to have this, to keep original module definition approach
    return Tether;
});

// ===== your MAIN configuration file, and dependencies definition =====
paths: {
    jquery: '/vendor/jquery',
    // tether: '/vendor/tether'
    tether: '/vendor/tetherWrapper'  // @todo original Tether is replaced with our wrapper around original
    // ...
},
shim: { 
     'bootstrap': ['tether', 'jquery']       
}

UPD: en Boostrap 4.1 Stable reemplazaron Tether , con Popper.js , consulte la documentación sobre el uso .


-2

Tuve el mismo problema y lo resolví incluyendo jquery-3.1.1.min antes de incluir cualquier js y funcionó de maravilla. Espero eso ayude.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.