Як виправити помилку; "Помилка: підказки для завантажувальних інструментів вимагають Tether (http://github.hubspot.com/tether/)"


176

Я використовую Bootstrap V4, і наступна помилка реєструється в консолі;

Помилка: підказки Bootstrap потребують Tether ( http://github.hubspot.com/tether/ )

Я спробував видалити помилку, встановивши 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>

Чи правильно я встановив тетер?

Чи може хтось допомогти мені усунути цю помилку?

Якщо ви хочете переглянути помилку на моєму сайті, натисніть тут і завантажте консоль.


Привіт, чи можете ви опублікувати використаний код? було б краще, якби ви могли покласти код у jsfiddle чи десь ще.
kucing_terbang

Немає реального коду для публікації, але якщо ви відвідаєте www.atlasestateagents.co.uk і переглянете консоль, ви побачите помилку javascript?
Майкл ЛБ

Я використовував ці точні рядки коду, і вони видалили для мене помилку в V3, для тих, хто цікавиться цією версією.
Вільям

@MichaelLB, замість посилання на ваш веб-сайт, я б рекомендував покласти тут фрагменти коду, в межах самого питання, чи буде оновлений ваш веб-сайт, і він втратить актуальність.
Farside

Відповіді:


239

Для Bootstrap 4 стабільний:

Оскільки бета-версія Bootstrap 4 не залежить від Tether, але Popper.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 alpha:

Bootstrap 4 альфа потребує Tether , тому вам необхідно включити , tether.min.js перш ніж включити bootstrap.min.js, наприклад.

<script src="https://npmcdn.com/tether@1.2.4/dist/js/tether.min.js"></script>
<script src="https://npmcdn.com/bootstrap@4.0.0-alpha.5/dist/js/bootstrap.min.js"></script>

1
Виправлено, дякую! Однак виправлення, яке призводить до нового попередження, можливо, до нового питання? 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'
Майкл ЛБ

Чудово! Я думаю, що помилка, яку ви отримуєте, надходить із bootstrap.min.jsбібліотеки. Чи все ще з’являється, якщо ви коментуєте це. Так, я б розмістив нове запитання, якщо в Google немає рішення. :)
adilapapaya

Подумайте про використання npmcdn для посилання на пакунки, опубліковані в npm, оскільки деякі люди прагнуть видалити файли збирання / перенесення з github. https://npmcdn.com/tether@1.2.4/dist/таhttps://npmcdn.com/bootstrap@4.0.0-alpha.2/dist/
eddywashere

2
але його дивне, v4-alpha.getbootstrap.com про це нічого не говорить
Максим Семенихин

Це робиться у версії aplha.3. Просто була ця помилка. Я вважаю, що tether зараз завантажується як пакет і більше не включається. Тому вам доведеться також включити цей сценарій.
Тім Вермален

19

Якщо ви використовуєте Webpack:

  1. Налаштування завантажувача завантажувача, як описано в документах;
  2. Встановити tether.js через npm;
  3. Додайте tether.js до плагіна веб-пакету ProvidePlugin.

webpack.config.js:

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

Джерело


Це все, що вам потрібно. Я роблю це, і це не працює.
Генрі

9
Як я вже згадував у випуску Github, новіші версії Bootstrap (наприклад, 4.0.0-alpha.6) тепер шукають "Tether" замість "window.Tether".
ThePadawan

18

Якщо ви використовуєте npm та переглядаєте:

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

// require
global.Tether = require('tether');

14

Особисто я використовую невеликий підмножина функцій Bootstrap і мені не потрібно приєднувати Tether.

Це має допомогти:

window.Tether = function () {
  throw new Error('Your Bootstrap may actually need Tether.');
};

1
так що ви пропонуєте, щоб перерізати ці лінії? Не добре, оскільки ви не повинні змінювати постачальників та сторонніх конвертів, це заважатиме робити оновлення пізніше. Якщо ви не використовуєте ці компоненти Bootstrap, як ви кажете - навіщо вам потрібен Tether ... тому я не дуже розумію значення вашого вкладу.
Farside

1
Попередження про Tether відображається навіть, якщо ви не використовуєте функцію завантаження, яка вимагає Tether. Моє рішення приховує дратівливе повідомлення в консолі.
Сезарі Даніель Новак

2
І ця зміна не оновлює сценарії третьої сторони чи постачальника. Ви можете додати його вище <script src = "bootstrap.js">
Cezary Daniel Nowak

Я насправді не розумію вас, чому б не просто однолінійний, так window.Tether = window.Tether || {};? Крім того, у вашому рішенні є застереження, що воно може стерти вже визначену залежність у глобальному масштабі, якщо модуль буде завантажений до того, як ваша річ буде виконана.
Farside

5
Це злом для альфа-версії Bootstrap. Я не бачу приводу бути прискіпливим :-) Якщо розробник не хоче використовувати Tether, протирання вже визначеної залежності не є випадком. І на мій погляд window.Tether = window.Tether || {};гірше, тому що він кине Tether is not a functionзамість значної помилки.
Сезарі Даніель Новак

10

Якщо ви хочете уникнути повідомлення про помилку і не використовуєте підказки інструменту Bootstrap, ви можете визначити window.Tether перед завантаженням Bootstrap.

<script>
  window.Tether = {};
</script>
<script src="js/bootstrap.min.js"></script>

Це добре працювало для мене ... у моєму випадку я використовую кутовий з завантажувальним пристроєм. Дякую!
MizAkita

Працював, я додав те саме у свій файл, він зараз працює нормально. Дякую за цю ідею. window.Tether = {}; define(['tether'], function (Tether) { return window.Tether = Tether; });
Ехсан Агей

8

Ви повинні виконати моє керівництво:
1. Додайте нижче джерело до Gemfile

source 'https://rails-assets.org' do
  gem 'rails-assets-tether', '>= 1.1.0'
end
  1. Виконати команду:

    встановити пакет

  2. Додайте цей рядок після jQuery в application.js.

    // = вимагати jquery
    // = вимагати тетер

  3. Перезавантажте сервер рейки.


7

Встановіть прив’язку через npm, як показано нижче

npm install tether --save-dev

потім додайте теттер у свій HTML над завантажувальним файлом, як нижче

<script src="node_modules/tether/dist/js/tether.min.js"></script>
<script src="jspm_packages/github/twbs/bootstrap@4.0.0-alpha.2/js/bootstrap.js"></script>

2
або становий , як цеbower install tether --save-dev
Farside

13
Чи не повинно бути npm install tether --saveзамість цього --save-dev? Він знадобиться і у виробництві.
siannone

7

Для веб-упаковки я вирішив це за допомогою webpack.config.js:

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

5

Додаткова примітка. Якщо ви перевірите нестиснений файл 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


3

Використовуючи веб-пакет, я використовував це в 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/)');
  }

Дякую, що спрацювало, я б запропонував вам відредагувати свою відповідь, щоб видалити невикористаний рядокtether: 'tether',
ghiscoding

Ви маєте рацію, але, як приклад, я думаю, що це ілюструє той факт, що потрібна точна назва.
Генрі

2

У мене виникли проблеми з Requjs за допомогою новітньої збірки boostrap 4. Я закінчив просто визначаючи:

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

в моєму html тезі голови, щоб обдурити чек завантаження. Потім я додав другу заяву про вимогу перед вимогою, яка завантажує мою програму, а згодом і мою залежність завантажувальної програми:

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

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

Використовуючи обидва в тандемі, і у вас не повинно виникнути жодних проблем із використанням поточної збірки завантажувальної програми 4 альфа.


2

Працює для генератора-aspnetcore-spa та завантажувального пристрою 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.ProvidePlugin ({$: 'jquery', jQuery: 'jquery', Tether: 'tether'}), ...
Вихователь

1

Для веб-пакета 1 або 2 з Bootstrap 4 вам потрібно

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

1

Якщо ви використовуєте Brunch, ви можете додати це в кінці свого brunch-config.js:

npm: {
    enabled: true,
    globals: {
        $: 'jquery', jQuery: 'jquery', 'Tether': 'tether'
    }
}

1

Якщо ви використовуєте навантажувач AMD Requ.js:

// 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']);
});

Це мені справді допомогло. Я затримався на цьому століттями - не зрозумів, що ти можеш вкладати необхідні дзвінки. Просимо вас, сер.
grimdog_john

1

Для вас користувачі Laravel Mix там, де працює Bootstrap4, вам потрібно буде запустити

npm installer tether --save

Потім оновіть, resources/assets/js/bootstrap.jsщоб завантажити Tether і перенести його до віконного об’єкта.

Ось як виглядає моя: (Зверніть увагу, я також повинен був бігати npm install popper.js --save)

window.$ = window.jQuery = require('jquery');
window.Popper = require('popper.js').default;
window.Tether = require('tether');
require('bootstrap');

0

Щоб додати відповідь на @ 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');

0

І якщо ви використовуєте webpack, вам знадобиться плагін Expose. Додайте цей завантажувач у свій webpack.config.js

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

0

У мене була така ж проблема, і ось як я її вирішив. Я на рейках 5.1.0rc1

Обов’язково додайте jquery і tether у файл application.js, вони повинні бути в самій верхній частині, як це

//= require jquery
//= require tether

Просто переконайтеся, що встановлено тетер


0

Спосіб №1 : Завантажте звідси та вставте його до своїх проектів, або
Спосіб №2 : використовуйте код нижче перед джерелом сценарію завантаження:

<script src="https://npmcdn.com/tether@1.2.4/dist/js/tether.min.js"></script>

0

Рекомендую дотримуватися вказівок у документації Bootstrap 4 :

Скопіюйте та вставте таблицю стилів <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 та Tether першими, оскільки наш код залежить від них. У той час як ми використовуємо тонку збірку 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>

0

Рішення UMD / AMD

Для тих хлопців, які роблять це через UMD і збирають через require.js, існує лаконічне рішення.

У модулі, який вимагає tetherяк залежність, що завантажується Tooltipяк UMD, перед визначенням модуля, просто поставте короткий фрагмент на визначення 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
    */
    //...
});

Цей короткий фрагмент на самому початку фактично може бути поставлений на будь-який вищий рівень вашої програми, найголовніше - викликати його до фактичного використання 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']       
}

UPD: У Boostrap 4.1 Stable вони замінили Tether , а Popper.js дивіться документацію щодо використання .


-2

У мене була така ж проблема, і я вирішив її, включивши jquery-3.1.1.min, перш ніж включити будь-який js, і він працював як шарм. Сподіваюся, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.