Bootstrap4 dependency PopperJs throws error on Angular
Asked Answered
G

6

96

I just created a brand new project
and ran npm install [email protected] jquery popper.js --save
and changed the .angular-cli.json's related parts as below

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

however receiving the error below

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

any idea how to fix it?

Gilstrap answered 12/8, 2017 at 3:5 Comment(5)
odd, I got it to work for me. are you using the latest cli? can you try reinstalling node_modulesPotful
The error must be somewhere elseDistiller
@Potful @angular/cli: 1.3.0 node: 6.11.2 npm: 5.3.0 did you changed the parts in .angular-cli.json if you did not you won't see the error in console.Gilstrap
yeah I have your exact scripts & styles. [email protected] [email protected] [email protected]Potful
i am ot sure how much this will help but you can look at this question on this page there is a question on how to add third party libsSelfdevotion
G
227

Looking at the docs at https://getbootstrap.com/docs/4.2/getting-started/introduction/#js you can see that they import the following:

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

Note the naming: jquery.slim.min.js, umd/popper.min.js!

Therefore I used the following in my .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"
      ],

After that it seems to work now.

Gustafson answered 12/8, 2017 at 11:23 Comment(8)
What do you have in your packages.json for jquery? In my node_modules jquery folder I didn't have a jquery.slim.min.js. Actually just found it in jquery 3.2.1Trunks
My package.json looks as follows for jquery: ` "jquery": "^3.2.1"` I have testet it with the full jquery version too, it seems to work also. Only the **umd**/popper.min.js seems neccessary.Gustafson
This also works in Aurelia when added to the prepend section in aurelia.json. If you are replacing the alpha it will likely replace tether.Anthropo
This answer has 76 upvotes... the dev gave a snarky "RTFM"/close to a Github issue asking the same question 😂Oogonium
Using jQuery-slim or not doesn't matter, but using the umd-version of popper.js fixed it, thanks!Barbate
I have used the "/bootstrap.bundle.min.js" file instead of bootstrap.min.js and seems to be working without referncing popper. Maybe it's inluced in the bundle.Lipcombe
@Lipcombe not all components need popper.js. See getbootstrap.com/docs/4.0/getting-started/introduction For example: * Dropdowns for displaying and positioning (also requires Popper.js) * Tooltips and popovers for displaying and positioning (also requires Popper.js) If you import not the umd version of popper the error occurs.Gustafson
Using /dist/umd instead of /dist in popper dependency did the trick. Thanks.Anamorphic
N
51

I had the same problem. My solution was not to import the dist-folder (./node_modules/popper.js/dist/popper.js) but rather the umd-folder (./node_modules/popper.js/dist/umd/popper.js). Does not matter if you get the mini or normal version of the js-file.

Ng answered 6/10, 2017 at 14:30 Comment(0)
B
3

I can see that many people are struggling with adding and properly including Bootstrap 4 dependencies (jQuery, popper.js etc.). But there is a much easier solution in the form of https://ng-bootstrap.github.io.

ng-bootstrap provides native Angular directives written from the ground up. The positive consequence is that: * you don't need to include and worry about jQuery, popper.js etc. * directives provide APIs that "make sense" in the Angular world

For anyone trying to use Bootstrap 4.beta with Angular - ng-bootstrap just released its first beta which is fully compatible with Bootstrap 4.beta CSS

Bronnie answered 12/8, 2017 at 6:34 Comment(2)
Much easier if you're using Angular, but not if you're using AngularJS...Slam
Well, the question was about Angular and angular-cli so not sure why the AngularJS is being brought up here...Bronnie
B
1

If you work in Asp.net Mvc umd also do the thing.

As in https://mcmap.net/q/181348/-popper-js-in-bootstrap-4-gives-syntaxerror-unexpected-token-export just add in BundleConfig.cs:

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

except:

bundles.Add(new ScriptBundle("~/bundles/popper").Include("~/Scripts/popper.js"));
Borecole answered 28/11, 2018 at 10:19 Comment(0)
R
0

To run modal please change the target from "es2015" to "es5" in 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"] 
}
Ribband answered 27/7, 2019 at 10:8 Comment(0)
D
0

Found hints in answers above :

1)Include popper.js before bootstrap

  1. Update the path to popper.js file. Using /dist/umd instead of /dist

The correct path to popper was in angular-cli.json file was

./node_modules/popper.js/dist/umd/popper.js
Denationalize answered 18/8, 2021 at 15:22 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.