Bootstrap4依赖项 PopperJs 在角度上抛出错误

我刚创建了一个全新的 项目
运行 npm install bootstrap@4.0.0-beta jquery popper.js --save
改变了 。角-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

知道怎么修吗?

43408 次浏览

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

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.

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.

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

As in https://stackoverflow.com/a/50839939/8497522 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"));

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

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