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.