La dependencia de Bootstrap4 PopperJs arroja un error en Angular

95

Acabo de crear un nuevo proyecto
y ejecutó npm install [email protected] 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?

cilerler
fuente
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. [email protected] [email protected] [email protected]
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.

Martín Bauer
fuente
¿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.

Björn Bergenheim
fuente
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

pkozlowski.opensource
fuente
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"));
Damian Kurek
fuente
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"] 
}
Maniraj A
fuente