Как исправить ошибку; ' Error: Bootstrap tooltips require Tether (http://github.hubspot.com/tether/)'
Я использую Bootstrap V4 и в консоли регистрируется следующая ошибка;
ошибка: всплывающие подсказки Bootstrap требуют привязки
(http://github.hubspot.com/tether/)
Я попытался удалить ошибку, установив Tether, но это не сработало. Я "установил" трос, включив следующие строки кода;
<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>
У меня "установленные" привязать правильно?
может кто-нибудь помочь мне удалить это ошибка?
Если вы хотите просмотреть ошибки на моем сайте, пожалуйста нажмите кнопку здесь и загрузите консоль.
23 ответов:
для Bootstrap 4 stable:
поскольку бета-версия Bootstrap 4 не зависит от троса, но Поппер.js. Все скрипты (должно быть в этом порядке):
<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>посмотреть текущие документация для самых новых версий скрипта.
только Bootstrap 4 Альфа:
Bootstrap 4 Альфа должен трос, так что вам нужно включить
tether.min.jsдо включитьbootstrap.min.js, например.<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>
Если вы используете Webpack:
- настройка загрузчика bootstrap, как описано в docs;
- установить троса.js через npm;
- добавить фал.js к webpack ProvidePlugin плагин.
webpack.конфиг.js:
plugins: [ <... your plugins here>, new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery", "window.jQuery": "jquery", "window.Tether": 'tether' }) ]
Если вы используете npm и browserify:
// es6 imports import tether from 'tether'; global.Tether = tether; // require global.Tether = require('tether');
лично я использую небольшое подмножество функций Bootstrap и не нужно прикреплять трос.
Это должно помочь:
window.Tether = function () { throw new Error('Your Bootstrap may actually need Tether.'); };
вы должны сделать мои рекомендации:
1. Добавить ниже источник в Gemfilesource 'https://rails-assets.org' do gem 'rails-assets-tether', '>= 1.1.0' end
выполнить команду:
bundle install
добавить эту строку после jQuery в приложении.js.
/ / = require jquery
//= требуется привязьперезапустить сервер rails.
установить трос через НПМ, как показано ниже
npm install tether --save-devзатем добавьте tether в свой html выше bootstrap, как показано ниже
<script src="node_modules/tether/dist/js/tether.min.js"></script> <script src="jspm_packages/github/twbs/[email protected]/js/bootstrap.js"></script>
Если вы хотите избежать сообщения об ошибке, и вы не используете подсказки Bootstrap, вы можете определить окно.Троса до загрузки Бутстрап.
<script> window.Tether = {}; </script> <script src="js/bootstrap.min.js"></script>
для webpack я решил это с помощью (webpack.конфиг.js):
new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jquery', "window.jQuery": "jquery", Tether: 'tether' })
дополнительно. Если вы проверите несжатый файл javascript, вы найдете условие:
if(window.Tether === undefined) { throw new Error('Bootstrap tooltips require Tether (http://github.hubspot.com/tether)') }Так что сообщение об ошибке содержит необходимую информацию.
вы можете скачать архив с этого ссылке.
несжатая версия:
https://rawgit.com/HubSpot/tether/master/src/js/tether.js https://rawgit.com/HubSpot/tether/master/dist/css/tether.css
С помощью webpack я использовал это в
webpack.config.js:var plugins = [ ... new webpack.ProvidePlugin({ $: "jquery", jQuery: "jquery", 'window.jQuery': 'jquery', 'window.Tether': 'tether', tether: 'tether', Tether: 'tether' }) ];кажется
Tetherбыл тот, кого он искал: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/)'); }
у меня была эта проблема с requirejs, используя новейшую сборку boostrap 4. В итоге я просто определил:
<script> window.Tether = {}; </script>в моем теге html head, чтобы обмануть проверку bootstrap. Затем я добавил второй оператор require непосредственно перед require, который загружает мое приложение, а затем мою зависимость bootstrap:
require(['tether'], function (Tether) { window.Tether = Tether; }); require([ "app", ], function(App){ App.initialize(); });используя оба из них в тандеме, и у вас не должно быть проблем с использованием текущей сборки bootstrap 4 alpha.
работает для генератора-aspnetcore-spa и 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) ... ] };
для webpack 1 или 2 с Bootstrap 4 вам нужно
new webpack.ProvidePlugin({ $: 'jquery', jQuery: 'jquery', Tether: 'tether' })
Если вы используете Бранч, вы можете добавить это в конце
brunch-config.js:npm: { enabled: true, globals: { $: 'jquery', jQuery: 'jquery', 'Tether': 'tether' } }
Если вы используете 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']); });
решение UMD / AMD
для тех парней, которые делают это через УМД, и составляет, например, через
require.js, Я нашел лаконичное решение.в модуле, который требует
tetherкак зависимость, которая загружаетTooltipкак UMD, перед определением модуля, просто поместите короткий фрагмент на определение троса:// 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 */ //... });этот короткий фрагмент в самом начале, на самом деле может быть поставлен на любой более высокий уровень вашего приложения, самое главное-вызвать его до фактического использования
bootstrapкомпонентыTetherзависимость.// ===== 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'] }прикреплять глобального объема, смогл легко извлечься поиском
@todo, когда разработчики Boostrap исправит свою вещь в следующих выпусках.
чтобы добавить к ответу @adilapapaya. Ибо
ember-cliпользователи, в частности, установитьtetherСbower install --save tetherа потом включить его в свой
ember-cli-build.jsфайл перед загрузкой, вот так:// 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');
и если вы используете webpack,вам понадобится плагин expose. В webpack.конфиг.js, добавьте этот загрузчик
{ test: require.resolve("tether"), loader: "expose?$!expose?Tether" }
У меня была такая же проблема и вот как я ее решила. Я на рельсах 5.1. 0rc1
обязательно добавьте require jquery и tether внутри вашего приложения.JS файл они должны быть на самом верху, как это
//= require jquery //= require tetherпросто убедитесь, что установлен трос
Способ #1: скачать с здесь и вставьте его в свои проекты, или
Способ #2: используйте код ниже перед вашим исходным кодом сценария начальной загрузки:<script src="https://npmcdn.com/[email protected]/dist/js/tether.min.js"></script>
Я рекомендую следовать инструкциям в Bootstrap 4 documentation:
скопировать стиль
<link>в своем<head>перед всеми другими таблицы стилей для загрузки нашего 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">добавьте наши Плагины JavaScript, jQuery и Tether ближе к концу вашего страницы, прямо перед закрывающим тегом. Будьте уверены, чтобы разместить на jQuery и привязать сначала, так как наш код зависит от них. Пока мы используем jQuery тонкое строение внутри наши документы, полная версия также поддерживается.
<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>
для вас Laravel Mix пользователей там работает Bootstrap4, вам нужно будет запустить
обновлениеnpm installer tether --saveresources/assets/js/bootstrap.jsзагрузить фал и привести его к объекту window.вот как выглядит мой: (обратите внимание, что мне также пришлось запустить
npm install popper.js --save)window.$ = window.jQuery = require('jquery'); window.Popper = require('popper.js').default; window.Tether = require('tether'); require('bootstrap');
У меня была та же проблема, и я решил ее, включив jquery-3.1.1.мин до включения любого js, и это сработало как шарм. Надеюсь, это поможет.
Comments