PopperJs de dependência do Bootstrap4 gera erro no Angular


95

Acabei de criar um novo projeto
e executou npm install bootstrap@4.0.0-beta 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?


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. jquery@3.2.1 popper.js@1.11.1 bootstrap@4.0.0-beta
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.


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.


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


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"));

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"] 
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.