Зависимость Bootstrap4 PopperJs выдает ошибку на Angular

95

Я только что создал новый project
и запустил npm install bootstrap@4.0.0-beta jquery popper.js --save
и изменил связанные части .angular-cli.json, как показано ниже

  "styles": [
    "../node_modules/bootstrap/dist/css/bootstrap.css"
  ],
  "scripts": [
    "../node_modules/jquery/dist/jquery.js",
    "../node_modules/popper.js/dist/popper.js",
    "../node_modules/bootstrap/dist/js/bootstrap.js"
  ],

однако получение ошибки ниже

10:2287 Uncaught SyntaxError: Unexpected token export
    at eval (<anonymous>)
    at webpackJsonp.../../../../script-loader/addScript.js.module.exports (addScript.js:9)
    at Object.../../../../script-loader/index.js!../../../../popper.js/dist/popper.js (popper.js?4b43:1)
    at __webpack_require__ (bootstrap 4403042439558687cdd6:54)
    at Object.2 (scripts.bundle.js:66)
    at __webpack_require__ (bootstrap 4403042439558687cdd6:54)
    at webpackJsonpCallback (bootstrap 4403042439558687cdd6:25)
    at scripts.bundle.js:1

есть идеи, как это исправить?

cilerler
источник
странно, у меня это работает. вы используете последнюю версию cli? Можете попробовать переустановить node_modules
LLai
1
Ошибка должна быть где-то в другом месте
brijmcq
@LLai @angular/cli: 1.3.0 node: 6.11.2 npm: 5.3.0, вы изменили детали в .angular-cli.json, если вы этого не сделали, вы не увидите ошибку в консоли.
cilerler
да, у меня есть ваши точные сценарии и стили. jquery@3.2.1 popper.js@1.11.1 bootstrap@4.0.0-beta
LLai
Я не уверен, насколько это поможет, но вы можете посмотреть этот вопрос на этой странице, есть вопрос о том, как добавить сторонние библиотеки
Рахул Сингх

Ответы:

224

Просматривая документы на https://getbootstrap.com/docs/4.2/getting-started/introduction/#js, вы можете увидеть, что они импортируют следующее:

<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>

Обратите внимание на название: jquery. тонкий .min.js, UMD /popper.min.js!

Поэтому я использовал в своем .angular-cli.json:

      "styles": [
        "../node_modules/bootstrap/dist/css/bootstrap.css"
      ],
      "scripts": [
        "../node_modules/jquery/dist/jquery.slim.min.js",
        "../node_modules/popper.js/dist/umd/popper.min.js",
        "../node_modules/bootstrap/dist/js/bootstrap.min.js"
      ],

После этого вроде как работает.

Мартин Бауэр
источник
Что у вас есть в файле packages.json для jquery? В моей папке jquery node_modules у меня не было jquery.slim.min.js. На самом деле только что нашел его в jquery 3.2.1
Джим Калверуэлл
2
Мой package.json для jquery выглядит следующим образом: `" jquery ":" ^ 3.2.1 "` Я тестировал его и с полной версией jquery, похоже, он тоже работает. Кажется, нужен только ** umd ** / popper.min.js.
Мартин Бауэр,
2
Этот ответ получил 76 голосов за ... разработчик язвительно «RTFM» / близко к проблеме Github, задав тот же вопрос 😂
brandones
4
Использование jQuery-slim или без него не имеет значения, но использование umd-версии popper.js исправило это, спасибо!
Finstas 02
2
Использование /dist/umdвместо /distзависимости popper сделало свое дело. Спасибо.
redent84
50

У меня такая же проблема. Мое решение было не импортировать DIST-папку (./node_modules/popper.js/dist/popper.js) , а скорее на UMD-папку (./node_modules/popper.js/dist/ UMD /popper.js). Неважно, получаете ли вы мини или обычную версию js-файла.

Бьорн Бергенхайм
источник
3

Я вижу, что многие люди борются с добавлением и правильным включением зависимостей Bootstrap 4 (jQuery, popper.js и т. Д.). Но есть гораздо более простое решение в виде https://ng-bootstrap.github.io .

ng-bootstrap предоставляет собственные директивы Angular, написанные с нуля. Положительным результатом является то, что: * вам не нужно включать и беспокоиться о jQuery, popper.js и т. Д. * Директивы предоставляют API, которые "имеют смысл" в мире Angular

Для всех, кто пытается использовать Bootstrap 4.beta с Angular - ng-bootstrap только что выпустил свою первую бета-версию, которая полностью совместима с Bootstrap 4.beta CSS.

pkozlowski.opensource
источник
Намного проще, если вы используете Angular, но не AngularJS ...
Эль Мак,
1
Ну, вопрос был об Angular и angular-cli, поэтому не знаю, почему здесь поднимается AngularJS ...
pkozlowski.opensource
1

Если вы работаете в ASP.NET MVC UMD также сделать вещь.

Как и в https://stackoverflow.com/a/50839939/8497522, просто добавьте в BundleConfig.cs:

bundles.Add(new ScriptBundle("~/bundles/popper").Include("~/Scripts/umd/popper.js"));

Кроме:

bundles.Add(new ScriptBundle("~/bundles/popper").Include("~/Scripts/popper.js"));
Дамиан Курек
источник
0

Чтобы запустить модальный режим, измените цель с «es2015» на «es5» в tsconfig.ts

"styles": [ "src/styles.css", 
            "node_modules/bootstrap/dist/css/bootstrap.min.css" ], 
"scripts": ["node_modules/jquery/dist/jquery.min.js", 
            "node_modules/popper.js/dist/umd/popper.min.js", 
            "node_modules/bootstrap/dist/js/bootstrap.min.js"] 
}
Maniraj A
источник