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 tether
als Abhängigkeit, die Tooltip
als 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 bootstrap
Komponenten mit Tether
Abhä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) .