Ошибка Bootstrap 4 "Раскрывающийся список Bootstrap требует Popper.js", с Aurelia CLI и Require.js
У меня возникают проблемы при настройке бета-версии Bootstrap 4 в приложении Aurelia CLI (v0.31.1) с помощью requirejs и использованием TypeScript. После того, как я попробовал несколько вариантов конфигурации, я продолжаю получать следующую ошибку консоли:
Uncaught Ошибка: выпадающий Bootstrap требует Popper.js
Вот шаги для воспроизведения. Сначала установите пакеты:
$ npm install --save jquery bootstrap@4.0.0-beta popper.js
Далее я настроил aurelia.json:
"jquery",
{
"name": "popper.js",
"path": "../node_modules/popper.js/dist/umd",
"main": "popper"
},
{
"name": "bootstrap",
"path": "../node_modules/bootstrap/dist",
"main": "js/bootstrap.min",
"deps": [
"jquery",
"popper.js"
],
"exports": "$",
"resources": [
"css/bootstrap.css"
]
}
Обратите внимание, что в конфиге выше:
- popper.js зарегистрирован до начальной загрузки
- модуль UMD используется
- popper.js устанавливается как зависимость для начальной загрузки, рядом с jquery
Наконец, в моем app.ts:
import 'bootstrap';
С этой конфигурацией, построение с использованием au build
работает отлично. Но после запуска, используя au run --watch
Я получаю следующие ошибки консоли:
Uncaught Ошибка: для раскрывающегося списка начальной загрузки требуется Popper.js ( https://popper.js.org/) (defaults.js: 19)
Uncaught Ошибка: для раскрывающегося списка начальной загрузки требуется Popper.js ( https://popper.js.org/) (bootstrap.min.js: 6)
... чуть дальше:
Uncaught TypeError: plugin.load не является функцией в модуле. (defaults.js:19)
К сожалению, в документации по Bootstrap 4 упоминаются только инструкции в веб-пакете. Так же, как и на канале Gitter.im Aurelia, и на Stackru. Я не могу найти образцы относительно Aurelia CLI с Require.js. И, наконец, Google покажет только примеры для встраивания альфа-версий (которые основаны на "привязывании", а не "поппере").
Подобные вопросы о SO, которые имеют ту же ошибку, но не применимы к моей ситуации:
- Bootstrap 4 Beta импортирует Popper.js с помощью Webpack 3.x. Popper не является конструктором
- Для раскрывающегося списка Angular 4 Bootstrap требуется Popper.js
- И еще несколько...
Итак, мой вопрос: как я могу настроить Bootstrap 4 с Popper.js в CLI-приложении Aurelia (используя Require.js, а не Webpack)?
Благодарю.
5 ответов
Поппер заменил Тетера в бета-версии.
Таким образом, вам нужно поменять привязь с помощью popper (или просто добавить ее, если у вас никогда не было альфа) в раздел prepend вашего файла aurelia.json. (Убедитесь, что вы ссылаетесь на версию UMD, показанную ниже)
"prepend": [
...
"node_modules/jquery/dist/jquery.js",
"node_modules/popper.js/dist/umd/popper.min.js",
...
]
Вам также потребуется пакет, как и ожидалось, что-то вроде этого:
{
"name": "bootstrap4",
"path": "../node_modules/bootstrap/dist",
"main": "js/bootstrap.min",
"deps": [
"jquery"
],
"exports": "$",
"resources": [
"css/bootstrap.css"
]
}
= Добавление =
В отличие от привязи, поппер, кажется, не нуждается в добавлении. Таким образом, вы можете включить его как любую другую зависимость с
{
"name": "popper.js",
"path": "../node_modules/popper.js/dist/umd",
"main": "popper.min"
},
Я удалил popper.js и использовал версию, встроенную в bs4, используя js/bootstrap.bundle.min
вместо js/bootstrap.min
"jquery",
{
"name": "bootstrap",
"path": "../node_modules/bootstrap/dist",
"main": "js/bootstrap.bundle.min",
"deps": ["jquery"],
"exports": "$",
"resources": [
"css/bootstrap.css"
]
},
Добавьте в свой код.
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
Использование комплектной версии BS4 работало для меня следующим образом:
Удалить поппер npm uninstall popper.js
Обновление до BS4 или позже npm install bootstrap --save
Убедитесь, что jquery установлен npm install bootstrap --save
Отредактируйте `.angular-cli.json', чтобы включить jquery и связанный BS4
"scripts": [
"../node_modules/jquery/dist/jquery.slim.min.js",
"../node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"
],
В новом bootstrap 4 вы можете просто включить это:
<script type="text/javascript" src="/assets/vendor/bootstrap/dist/js/bootstrap.bundle.min.js">
</script>
Popper.js уже включен в этот файл. Проверьте раскрывающиеся списки документации начальной загрузки:https://getbootstrap.com/docs/4.0/components/dropdowns/
PS: Конечно, вам нужно установить bootstrap 4! Возможно, это не совсем ваш ответ, но он может сильно помочь другим людям, которые не используют Aurelia CLI и Require.js.
Начиная с финальной версии начальной загрузки 4.0 ниже приведен рабочий конф для начальной загрузки с поппером.
//file; aurelia_project/aurelia.json
"dependencies": [
...
... // other dependencies
...
"text",
"jquery",
{
"name": "popper.js",
"path": "../node_modules/popper.js/dist/umd",
"main": "popper.min"
},
{
"name": "bootstrap",
"path": "../node_modules/bootstrap/dist",
"main": "js/bootstrap.min",
"deps": ["jquery"],
"exports": "$",
"resources": [
"css/bootstrap.css"
]
},
...
... // remaining dependencies
...
],
Это работает с последней версией aurelia & bootstrap (по состоянию на 2018-февраль) без использования метода prepend