La dependencia de Bootstrap4 PopperJs arroja un error en Angular


95

Acabo de crear un nuevo proyecto
y ejecutó npm install bootstrap@4.0.0-beta jquery popper.js --save
y cambió las partes relacionadas de .angular-cli.json como se muestra a continuación

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

sin embargo, recibiendo el error a continuación

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

¿Alguna idea de cómo arreglarlo?


extraño, conseguí que me funcionara. ¿estás usando la última cli? ¿Puedes intentar reinstalar node_modules?
LLai

1
El error debe estar en otro lugar
brijmcq

@LLai @angular/cli: 1.3.0 node: 6.11.2 npm: 5.3.0, ¿cambió las partes en .angular-cli.json? Si no lo hizo, no verá el error en la consola.
cilerler

sí, tengo tus guiones y estilos exactos. jquery@3.2.1 popper.js@1.11.1 bootstrap@4.0.0-beta
LLai

No estoy seguro de cuánto ayudará esto, pero puede ver esta pregunta en esta página, hay una pregunta sobre cómo agregar bibliotecas de terceros
Rahul Singh

Respuestas:


223

Al mirar los documentos en https://getbootstrap.com/docs/4.2/getting-started/introduction/#js , puede ver que importan lo siguiente:

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

Tenga en cuenta el nombre: jquery. slim .min.js, umd /popper.min.js!

Por lo tanto, utilicé lo siguiente en mi .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"
      ],

Después de eso, parece funcionar ahora.


¿Qué tienes en tu packages.json para jquery? En mi carpeta jquery node_modules no tenía un jquery.slim.min.js. En realidad, lo acabo de encontrar en jquery 3.2.1
Jim Culverwell

2
Mi package.json se ve de la siguiente manera para jquery: `" jquery ":" ^ 3.2.1 "` También lo he probado con la versión completa de jquery, parece que también funciona. Solo parece necesario ** umd ** / popper.min.js.
Martin Bauer

2
Esta respuesta tiene 76 votos a favor ... el desarrollador dio un "RTFM" sarcástico / cerca de un problema de Github haciendo la misma pregunta 😂
brandones

4
Usar jQuery-slim o no no importa, pero usar la versión umd de popper.js lo solucionó, ¡gracias!
finstas

2
Usar en /dist/umdlugar de /disten la dependencia de popper hizo el truco. Gracias.
redent84

50

Yo tuve el mismo problema. Mi solución no fue importar la carpeta dist (./node_modules/popper.js/dist/popper.js) sino la carpeta umd (./node_modules/popper.js/dist/ umd /popper.js). No importa si obtiene la versión mini o normal del archivo js.


3

Puedo ver que muchas personas están luchando para agregar e incluir correctamente las dependencias de Bootstrap 4 (jQuery, popper.js, etc.). Pero hay una solución mucho más sencilla en forma de https://ng-bootstrap.github.io .

ng-bootstrap proporciona directivas angulares nativas escritas desde cero. La consecuencia positiva es que: * no es necesario incluir ni preocuparse por jQuery, popper.js, etc. * las directivas proporcionan API que "tienen sentido" en el mundo angular

Para cualquiera que intente usar Bootstrap 4.beta con Angular, ng-bootstrap acaba de lanzar su primera versión beta que es totalmente compatible con Bootstrap 4.beta CSS


Mucho más fácil si usa Angular, pero no si usa AngularJS ...
El Mac

1
Bueno, la pregunta era sobre Angular y angular-cli, así que no estoy seguro de por qué AngularJS se está trayendo aquí ...
pkozlowski.opensource

1

Si trabajas en Asp.net Mvc umd también hazlo.

Como en https://stackoverflow.com/a/50839939/8497522 simplemente agregue en BundleConfig.cs:

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

excepto:

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

0

Para ejecutar modal, cambie el objetivo de "es2015" a "es5" en 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"] 
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.