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.

Michael LB
fuente
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/[email protected]/dist/js/tether.min.js"></script>
<script src="https://npmcdn.com/[email protected]/dist/js/bootstrap.min.js"></script>
adilapapaya
fuente
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/[email protected]/dist/yhttps://npmcdn.com/[email protected]/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

Monigote de nieve
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');
Jannic Beck
fuente
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.');
};
Cezary Daniel Nowak
fuente
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>
Donald Rich
fuente
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.

Quy Le
fuente
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/[email protected]/js/bootstrap.js"></script>
cjfarrelly
fuente
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'
})
opmind
fuente
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/)');
  }
Enrique
fuente
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.

Throttlehead
fuente
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)
            ...
        ]
};
Vladimir
fuente
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'
})
Djalas
fuente
1

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

npm: {
    enabled: true,
    globals: {
        $: 'jquery', jQuery: 'jquery', 'Tether': 'tether'
    }
}
Ege Ersoz
fuente
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']);
});
Lukas Pierce
fuente
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');
ceros y unos
fuente
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');
wuher
fuente
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"
}
se sentó
fuente
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

Ruben Cruz
fuente
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/[email protected]/dist/js/tether.min.js"></script>
Hamid
fuente
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>
CodeBiker
fuente
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 .

Lado lejano
fuente
-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.

Jakamollo
fuente