So beheben Sie den Fehler; 'Fehler: Bootstrap-Tooltips erfordern Tether (http://github.hubspot.com/tether/)'

176

Ich verwende Bootstrap V4 und der folgende Fehler wird in der Konsole protokolliert.

Fehler: Bootstrap-Tooltips erfordern Tether ( http://github.hubspot.com/tether/ )

Ich habe versucht, den Fehler durch die Installation von Tether zu beheben, aber es hat nicht funktioniert. Ich habe Tether durch Einfügen der folgenden Codezeilen "installiert".

<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>

Habe ich den Haltegurt richtig installiert?

Kann mir jemand helfen, diesen Fehler zu beheben?

Wenn Sie den Fehler auf meiner Website anzeigen möchten, klicken Sie hier und laden Sie Ihre Konsole.

Michael LB
quelle
Hallo, kannst du den Code posten, den du verwendest? wäre besser, wenn Sie den Code in jsfiddle oder woanders setzen könnten.
kucing_terbang
Es gibt keinen richtigen Code zum Posten, aber wenn Sie www.atlasestateagents.co.uk besuchen und die Konsole anzeigen, wird der Javascript-Fehler angezeigt?
Michael LB
Ich habe genau diese Codezeilen verwendet und sie haben den Fehler für mich in V3 beseitigt, für alle, die sich über diese Version wundern.
William
@MichaelLB, anstatt auf Ihre Website zu verlinken, würde ich empfehlen, hier einige Code-Schnipsel in die Frage selbst einzufügen, ob Ihre Website aktualisiert wird und die Aktualität verliert.
Farside

Antworten:

239

Für Bootstrap 4 stabil:

Da Beta Bootstrap 4 nicht von Tether abhängt, sondern von Popper.js . Alle Skripte ( müssen in dieser Reihenfolge sein):

<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>

In der aktuellen Dokumentation finden Sie die neuesten Skriptversionen.


Nur Bootstrap 4 Alpha:

Bootstrap 4 alpha benötigt Tether , daher müssen Sie einschließen , tether.min.js bevor Sie einschließen bootstrap.min.js, z.

<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
quelle
1
Behoben, danke! Das Beheben dieses Problems führte jedoch zu einer neuen Warnung, möglicherweise für eine neue Frage? 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
Toll! Ich denke, der Fehler, den Sie bekommen, kommt aus der bootstrap.min.jsBibliothek. Wird es immer noch angezeigt, wenn Sie es auskommentieren. Ja, ich würde eine neue Frage stellen, wenn Google keine Lösung hat. :)
Adilapapaya
Erwägen Sie die Verwendung von npmcdn, um Links zu Paketen zu erstellen, die auf npm veröffentlicht wurden, da einige Leute dazu neigen, die Build- / Dist-Dateien von Github zu entfernen. https://npmcdn.com/[email protected]/dist/undhttps://npmcdn.com/[email protected]/dist/
eddywashere
2
aber es ist seltsam, v4-alpha.getbootstrap.com sagt nichts darüber
Maksym Semenykhin
Es funktioniert auf Version aplha.3. Hatte gerade diesen Fehler. Ich glaube, Tether ist jetzt als Paket heruntergeladen und nicht mehr enthalten. Sie müssen also auch dieses Skript einfügen.
Tim Vermaelen
19

Wenn Sie Webpack verwenden:

  1. Richten Sie den Bootstrap-Loader wie in den Dokumenten beschrieben ein.
  2. Installieren Sie tether.js über npm.
  3. Fügen Sie tether.js zum Webpack ProvidePlugin-Plugin hinzu.

webpack.config.js:

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

Quelle

Schneemann
quelle
Ist das alles was du brauchst? Ich mache das und es funktioniert nicht.
Henry
9
Wie ich im Github-Problem erwähnt habe, suchen neuere Versionen von Bootstrap (z. B. 4.0.0-alpha.6) jetzt nach "Tether" anstelle von "window.Tether".
ThePadawan
18

Wenn Sie npm und browserify verwenden:

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

// require
global.Tether = require('tether');
Jannic Beck
quelle
14

Persönlich verwende ich eine kleine Teilmenge der Bootstrap-Funktionalität und muss Tether nicht anhängen.

Dies sollte helfen:

window.Tether = function () {
  throw new Error('Your Bootstrap may actually need Tether.');
};
Cezary Daniel Nowak
quelle
1
Also, was schlagen Sie vor, um diese Linien zu schneiden? nicht gut, da Sie nicht ändern sollten Anbieter und Dritten Libs, es wird verhindert , dass Sie später Updates zu tun. Wenn Sie diese Bootstrap-Komponenten nicht wie gesagt verwenden - warum sollten Sie Tether benötigen? Ich verstehe den Wert Ihrer Eingabe also nicht wirklich.
Farside
1
Die Tether-Warnung wird auch angezeigt, wenn Sie keine Bootstrap-Funktionalität verwenden, für die Tether erforderlich ist. Meine Lösung verbirgt nervige Nachrichten in der Konsole.
Cezary Daniel Nowak
2
Durch diese Änderung werden keine Skripte von Drittanbietern oder Anbietern aktualisiert. Sie können es über <script src = "bootstrap.js"> hinzufügen
Cezary Daniel Nowak
Ich verstehe dich nicht wirklich, warum dann nicht gleich einzeilig window.Tether = window.Tether || {};? Außerdem enthält Ihre Lösung die Einschränkung, dass bereits definierte Abhängigkeiten in einem globalen Bereich gelöscht werden können, wenn das Modul geladen wird, bevor Ihr Ding ausgeführt wird.
Farside
5
Dies ist ein Hack für eine Alpha-Version von Bootstrap. Ich sehe keinen Grund, wählerisch zu sein :-) Wenn Entwickler Tether nicht verwenden möchten, ist das Löschen bereits definierter Abhängigkeiten kein Fall. Und meiner Meinung nach window.Tether = window.Tether || {};ist es schlimmer, weil es werfen wird Tether is not a function, anstatt bedeutungsvolle Fehler.
Cezary Daniel Nowak
10

Wenn Sie die Fehlermeldung vermeiden möchten und keine Bootstrap-Tooltipps verwenden, können Sie window.Tether definieren, bevor Sie Bootstrap laden.

<script>
  window.Tether = {};
</script>
<script src="js/bootstrap.min.js"></script>
Donald Rich
quelle
Das hat bei mir gut funktioniert ... in meinem Fall verwende ich Angular mit Bootstrap. Vielen Dank!
MizAkita
Hat funktioniert, ich habe dasselbe in meine Datei aufgenommen, es funktioniert jetzt einwandfrei. Danke für diese Idee. window.Tether = {}; define(['tether'], function (Tether) { return window.Tether = Tether; });
Ehsan Aghaei
8

Sie sollten meine Richtlinie
befolgen : 1. Fügen Sie Gemfile die folgende Quelle hinzu

source 'https://rails-assets.org' do
  gem 'rails-assets-tether', '>= 1.1.0'
end
  1. Führen Sie den Befehl aus:

    Bundle installieren

  2. Fügen Sie diese Zeile nach jQuery in application.js hinzu.

    // = erfordert jquery
    // = erfordert Tether

  3. Starten Sie den Rails-Server neu.

Quy Le
quelle
7

Installieren Sie den Haltegurt wie unten beschrieben über npm

npm install tether --save-dev

Fügen Sie dann Ihrem HTML-Code über dem Bootstrap wie unten Tether hinzu

<script src="node_modules/tether/dist/js/tether.min.js"></script>
<script src="jspm_packages/github/twbs/[email protected]/js/bootstrap.js"></script>
cjfarrelly
quelle
2
oder Laube wie diesebower install tether --save-dev
Farside
13
Sollte es nicht npm install tether --savestatt sein --save-dev? Es wird auch in der Produktion benötigt.
Siannone
7

Für das Webpack habe ich dies gelöst mit webpack.config.js:

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

Ein zusätzlicher Hinweis. Wenn Sie die unkomprimierte Javascript-Datei überprüfen, finden Sie die Bedingung:

if(window.Tether === undefined) {
     throw new Error('Bootstrap tooltips require Tether (http://github.hubspot.com/tether)')
}

Die Fehlermeldung enthält also die erforderlichen Informationen.

Sie können das Archiv von diesem Link herunterladen .

Unkomprimierte Version:

https://rawgit.com/HubSpot/tether/master/src/js/tether.js https://rawgit.com/HubSpot/tether/master/dist/css/tether.css

Anton Lyhin
quelle
3

Mit Webpack habe ich dies verwendet in webpack.config.js:

var plugins = [

    ...

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

Es scheint, als wäre Tetheres das, wonach es gesucht hat:

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/)');
  }
Henry
quelle
Vielen Dank, dass das funktioniert hat, ich würde vorschlagen, dass Sie Ihre Antwort bearbeiten, um die nicht verwendete Zeile zu entfernentether: 'tether',
Ghiscoding
Sie haben Recht, aber als Beispiel zeigt es meiner Meinung nach, dass eine genaue Benennung erforderlich ist.
Henry
2

Ich hatte dieses Problem mit requirejs, die den neuesten Boostrap 4-Build verwendeten. Am Ende habe ich nur definiert:

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

in meinem HTML-Head-Tag, um den Bootstrap-Check zu täuschen. Ich habe dann eine zweite require-Anweisung hinzugefügt, kurz bevor die Anforderung meine App lädt, und anschließend meine Bootstrap-Abhängigkeit:

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

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

Wenn Sie beide zusammen verwenden, sollten Sie kein Problem damit haben, den aktuellen Alpha-Build für Bootstrap 4 zu verwenden.

Drosselklappe
quelle
2

Funktioniert für Generator-Aspnetcore-Spa und 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
quelle
Genug nur drei: ... neues Webpack.ProvidePlugin ({$: 'jquery', jQuery: 'jquery', Tether: 'tether'}), ...
Mentor
1

Für Webpack 1 oder 2 mit Bootstrap 4 benötigen Sie

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

Wenn Sie Brunch verwenden, können Sie dies am Ende Ihres brunch-config.js:

npm: {
    enabled: true,
    globals: {
        $: 'jquery', jQuery: 'jquery', 'Tether': 'tether'
    }
}
Ege Ersoz
quelle
1

Wenn Sie den AMD-Loader require.js verwenden:

// 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
quelle
Das hat mir wirklich geholfen. Ich war ewig dabei - wusste nicht, dass man die erforderlichen Anrufe verschachteln kann. Stimmen Sie für Sie, Sir.
grimdog_john
1

Für Ihre Laravel Mix-Benutzer, die Bootstrap4 ausführen, müssen Sie ausführen

npm installer tether --save

Aktualisieren Sie dann resources/assets/js/bootstrap.js, um Tether zu laden und zum Fensterobjekt zu bringen.

So sieht meine aus: (Hinweis, ich musste auch rennen npm install popper.js --save)

window.$ = window.jQuery = require('jquery');
window.Popper = require('popper.js').default;
window.Tether = require('tether');
require('bootstrap');
Nullen und Einsen
quelle
0

Zur Antwort von @ adilapapaya hinzufügen. Für ember-cliBenutzer speziell installieren tethermit

bower install --save tether

und fügen Sie es dann ember-cli-build.jsvor dem Bootstrap wie folgt in Ihre Datei ein:

// 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
quelle
0

Und wenn Sie Webpack verwenden, benötigen Sie das Expose-Plugin. Fügen Sie in Ihrer webpack.config.js diesen Loader hinzu

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

Ich hatte das gleiche Problem und so habe ich es gelöst. Ich bin auf Schienen 5.1.0rc1

Stellen Sie sicher, dass Sie in Ihrer application.js-Datei "require jquery and tether" hinzufügen. Diese müssen sich ganz oben befinden

//= require jquery
//= require tether

Stellen Sie einfach sicher, dass der Haltegurt installiert ist

Ruben Cruz
quelle
0

Methode 1 : Von hier herunterladen und in Ihre Projekte einfügen oder
Methode 2 : Verwenden Sie den folgenden Code vor Ihrer Bootstrap-Skriptquelle:

<script src="https://npmcdn.com/[email protected]/dist/js/tether.min.js"></script>
Hamid
quelle
0

Ich empfehle, die Anweisungen in der Bootstrap 4-Dokumentation zu befolgen :

Kopieren Sie das Stylesheet vor allen anderen Stylesheets <link>in Ihr <head>Stylesheet, um unser CSS zu laden.

<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">

Fügen Sie unsere JavaScript-Plugins, jQuery und Tether am Ende Ihrer Seiten direkt vor dem schließenden Tag hinzu. Stellen Sie sicher, dass Sie jQuery und Tether zuerst platzieren, da unser Code von ihnen abhängt. Während wir in unseren Dokumenten den schlanken Build von jQuery verwenden, wird auch die Vollversion unterstützt.

<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
quelle
0

UMD / AMD-Lösung

Für diejenigen, die es über UMD tun und über kompilierenrequire.js , gibt es eine lakonische Lösung.

In dem Modul, das tetherals Abhängigkeit, die Tooltipals UMD geladen wird, vor der Moduldefinition benötigt wird, setzen Sie einfach einen kurzen Ausschnitt auf die Definition von 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
    */
    //...
});

Dieses kurze Snippet am Anfang kann tatsächlich auf einer höheren Ebene Ihrer Anwendung abgelegt werden. Dies ist das Wichtigste - es vor der tatsächlichen Verwendung von bootstrapKomponenten mit TetherAbhängigkeit aufzurufen .

// ===== 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: In Boostrap 4.1 Stable haben sie Tether durch Popper.js ersetzt (siehe Dokumentation zur Verwendung) .

Farside
quelle
-2

Ich hatte das gleiche Problem und löste es, indem ich jquery-3.1.1.min einfügte, bevor ich js einfügte, und es funktionierte wie ein Zauber. Ich hoffe es hilft.

Jakamollo
quelle