PopperJs de dependência do Bootstrap4 gera erro no Angular

95

Acabei de criar um novo projeto
e executou npm install [email protected] jquery popper.js --save
e alterou as partes relacionadas do .angular-cli.json conforme abaixo

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

no entanto recebendo o erro abaixo

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

Alguma idéia de como consertar isso?

cilerler
fonte
estranho, eu tenho que trabalhar para mim. você está usando o CLI mais recente? você pode tentar reinstalar node_modules
LLai
1
O erro deve estar em outro lugar
brijmcq
@LLai @angular/cli: 1.3.0 node: 6.11.2 npm: 5.3.0, você alterou as partes em .angular-cli.json; caso contrário, não verá o erro no console.
cilerler
sim, eu tenho seus scripts e estilos exatos. [email protected] [email protected] [email protected]
LLai
Não tenho certeza do quanto isso vai ajudar, mas você pode olhar para esta questão nesta página, há uma questão sobre como adicionar libs de terceiros
Rahul Singh

Respostas:

223

Olhando os documentos em https://getbootstrap.com/docs/4.2/getting-started/introduction/#js, você pode ver que eles importam o seguinte:

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

Observe a nomenclatura: jquery. slim .min.js, umd /popper.min.js!

Portanto, usei o seguinte no meu .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"
      ],

Depois disso, parece funcionar agora.

Martin Bauer
fonte
O que você tem em seu packages.json para jquery? Na minha pasta node_modules jquery eu não tinha um jquery.slim.min.js. Na verdade, acabei de encontrá-lo no jquery 3.2.1
Jim Culverwell
2
Meu package.json se parece com o seguinte para jquery: `" jquery ":" ^ 3.2.1 "` Eu testei com a versão completa do jquery também, parece funcionar também. Apenas o ** umd ** / popper.min.js parece necessário.
Martin Bauer
2
Esta resposta tem 76 votos positivos ... o desenvolvedor deu um "RTFM" sarcástico / próximo a um problema do Github fazendo a mesma pergunta 😂
brandones
4
Usar jQuery-slim ou não não importa, mas usar a versão umd de popper.js consertou, obrigado!
finstas
2
Usar em /dist/umdvez de /distna dependência popper resolveu o problema. Obrigado.
redent84
50

Eu tive o mesmo problema. Minha solução não foi importar a pasta dist (./node_modules/popper.js/dist/popper.js), mas sim a pasta umd (./node_modules/popper.js/dist/ umd /popper.js). Não importa se você obteve a versão mini ou normal do arquivo js.

Björn Bergenheim
fonte
3

Posso ver que muitas pessoas estão lutando para adicionar e incluir adequadamente as dependências do Bootstrap 4 (jQuery, popper.js etc.). Mas existe uma solução muito mais fácil na forma de https://ng-bootstrap.github.io .

ng-bootstrap fornece diretivas angulares nativas escritas do zero. A consequência positiva é que: * você não precisa incluir e se preocupar com jQuery, popper.js etc. * As diretivas fornecem APIs que "fazem sentido" no mundo Angular

Para quem está tentando usar o Bootstrap 4.beta com Angular - ng-bootstrap acaba de lançar seu primeiro beta que é totalmente compatível com o CSS do Bootstrap 4.beta

pkozlowski.opensource
fonte
Muito mais fácil se você estiver usando o Angular, mas não se estiver usando o AngularJS ...
El Mac
1
Bem, a pergunta era sobre Angular e angular-cli, então não tenho certeza por que o AngularJS está sendo trazido aqui ...
pkozlowski.opensource
1

Se você trabalha no Asp.net Mvc umd também faça a coisa.

Como em https://stackoverflow.com/a/50839939/8497522, basta adicionar BundleConfig.cs:

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

exceto:

bundles.Add(new ScriptBundle("~/bundles/popper").Include("~/Scripts/popper.js"));
Damian Kurek
fonte
0

Para executar modal, altere o destino de "es2015" para "es5" em 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
fonte