Zależność Bootstrap4 PopperJs zgłasza błąd w Angular

95

Właśnie stworzyłem zupełnie nowy project
i uruchomiono npm install [email protected] jquery popper.js --save
i zmieniono powiązane części pliku .angular-cli.json , jak poniżej

  "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"
  ],

jednak otrzymując poniższy błąd

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

jakiś pomysł, jak to naprawić?

cilerler
źródło
dziwne, mam to do pracy dla mnie. czy używasz najnowszego CLI? czy możesz spróbować ponownie zainstalować node_modules
LLai,
1
Błąd musi być gdzie indziej
brijmcq
@LLai, @angular/cli: 1.3.0 node: 6.11.2 npm: 5.3.0czy zmieniłeś części w .angular-cli.json, jeśli tego nie zrobiłeś, nie zobaczysz błędu w konsoli.
cilerler
tak, mam twoje dokładne skrypty i style. [email protected] [email protected] [email protected]
LLai
jestem ot pewny ile to pomoże, ale można spojrzeć na to pytanie na tej stronie znajduje się pytanie, w jaki sposób dodać bibliotekami strony trzeciej
Rahul Singh

Odpowiedzi:

224

Patrząc na dokumenty na https://getbootstrap.com/docs/4.2/getting-started/introduction/#js , możesz zobaczyć, że importują następujące elementy:

<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>

Zwróć uwagę na nazewnictwo: jquery. slim .min.js , umd /popper.min.js!

Dlatego użyłem w moim .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"
      ],

Po tym wydaje się, że teraz działa.

Martin Bauer
źródło
Co masz w swoim pliku packages.json dla jquery? W folderze jquery node_modules nie mam pliku jquery.slim.min.js. Właściwie to właśnie znalazłem go w jquery 3.2.1
Jim Culverwell
2
Mój plik package.json dla jquery wygląda następująco: `" jquery ":" ^ 3.2.1 "` Testowałem go również z pełną wersją jquery, wydaje się, że też działa. Jedynie ** umd ** / popper.min.js wydaje się konieczne.
Martin Bauer
2
Ta odpowiedź ma 76 głosów pozytywnych ... twórca dał żartobliwy "RTFM" / bliski problem z Githubem, zadając to samo pytanie 😂
brandones
4
Używanie jQuery-slim lub nie ma znaczenia, ale użycie wersji umd popper.js naprawiło to, dzięki!
zakończenie
2
Używanie /dist/umdzamiast /distw zależności od poppera załatwiło sprawę. Dzięki.
redent84
50

Miałem ten sam problem. Moim rozwiązaniem nie było zaimportowanie folderu dist-folder (./node_modules/popper.js/dist/popper.js), ale raczej folder umd (./node_modules/popper.js/dist/ umd /popper.js). Nie ma znaczenia, czy otrzymujesz mini czy normalną wersję pliku js.

Björn Bergenheim
źródło
3

Widzę, że wiele osób ma problemy z dodaniem i poprawnym włączeniem zależności Bootstrap 4 (jQuery, popper.js itp.). Ale jest dużo łatwiejsze rozwiązanie w postaci https://ng-bootstrap.github.io .

ng-bootstrap dostarcza natywne dyrektywy Angular napisane od podstaw. Pozytywną konsekwencją jest to, że: * nie musisz uwzględniać i martwić się o jQuery, popper.js itp. * Dyrektywy zapewniają API, które "mają sens" w świecie Angular

Dla każdego, kto próbuje używać Bootstrap 4.beta z Angularem - ng-bootstrap właśnie wydał swoją pierwszą wersję beta, która jest w pełni kompatybilna z Bootstrap 4. beta CSS

pkozlowski.opensource
źródło
O wiele łatwiej, jeśli używasz Angulara, ale nie, jeśli używasz AngularJS ...
El Mac
1
Cóż, pytanie dotyczyło Angular i angular-cli, więc nie jestem pewien, dlaczego AngularJS jest tu wychowywany ...
pkozlowski.opensource
1

Jeśli pracujesz w Asp.net Mvc umd, zrób to.

Jak w https://stackoverflow.com/a/50839939/8497522 po prostu dodaj BundleConfig.cs:

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

z wyjątkiem:

bundles.Add(new ScriptBundle("~/bundles/popper").Include("~/Scripts/popper.js"));
Damian Kurek
źródło
0

Aby uruchomić tryb modalny, zmień cel z „es2015” na „es5” w 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
źródło