Solução UMD / AMD
Para aqueles caras que fazem isso através do UMD e compilam via require.js
, existe uma solução lacônica.
No módulo, que requer tether
como dependência, que carrega Tooltip
como UMD, na frente da definição do módulo, basta colocar um pequeno trecho na definição 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
*/
//...
});
Esse pequeno trecho no início, na verdade, pode ser colocado em qualquer nível mais alto do seu aplicativo, o mais importante - invocá-lo antes do uso real dos bootstrap
componentes com Tether
dependência.
// ===== 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: No Boostrap 4.1 Stable, eles substituíram o Tether pelo Popper.js , consulte a documentação sobre o uso .