Módulo não encontrado: Erro: Não é possível resolver 'core-js / es6'

112

Eu tenho um problema com meu processo de construção em relação ao meu aplicativo React.

Sempre recebo o seguinte erro:

Módulo não encontrado: Erro: Não é possível resolver 'core-js / es6'

se eu usar isso em um polyfill.js:

importar 'core-js / es6';

Esse é o meu package.json:

{
  "name": "test",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "private": true,
  "devDependencies": {
    "@babel/core": "^7.4.0",
    "@babel/preset-env": "^7.4.2",
    "@babel/preset-react": "^7.0.0",
    "@babel/runtime": "^7.4.2",
    "babel-loader": "^8.0.5",
    "babel-preset-es2015": "^6.24.1",
    "copy-webpack-plugin": "^5.0.2",
    "css-hot-loader": "^1.4.4",
    "eslint": "5.15.3",
    "eslint-config-airbnb": "^17.1.0",
    "eslint-loader": "^2.1.2",
    "eslint-plugin-import": "2.16.0",
    "eslint-plugin-jsx-a11y": "6.2.1",
    "eslint-plugin-react": "7.12.4",
    "file-loader": "^3.0.1",
    "node-sass": "^4.11.0",
    "prettier": "^1.16.4",
    "react-hot-loader": "4.8.0",
    "sass-loader": "^7.1.0",
    "webpack": "^4.29.6",
    "webpack-cli": "^3.3.0",
    "webpack-dev-server": "^3.2.1"
  },
  "dependencies": {
    "axios": "^0.18.0",
    "core-js": "^3.0.0",
    "prop-types": "^15.7.2",
    "react": "^16.8.5",
    "react-dom": "^16.8.5",
    "react-redux": "^6.0.1",
    "react-string-replace": "^0.4.1",
    "redux": "^4.0.1",
    "slick-carousel": "^1.8.1"
  },
  "scripts": {
    "dev": "webpack-dev-server --hot",
    "build": "webpack --colors --profile --progress --env.mode production",
    "lint": "eslint ./src/ --ext .js,.jsx"
  }
}

Alguém pode ajudar aqui?

Gutelaunetyp
fonte
2
O mesmo erro no aplicativo angular após a versão de atualização. Verifique se esta pasta (core-js / es6) existe em seus módulos de nó.
Kamil Naja
@KamilNaja Estou enfrentando o mesmo problema e a pasta (core-js / es6) não existe em meus node_modules, eu tenho (core-js / es) em meus node_modules. O que fazer?
Kunal Tyagi

Respostas:

153

As importações mudaram para core-js versão 3.0.1 - por exemplo

import 'core-js/es6/array'; e import 'core-js/es7/array';

agora pode ser fornecido simplesmente pelo seguinte

import 'core-js/es/array';

se você preferir não trazer todo o core-js

LeaveTheCapital
fonte
18
depois de migrar o angular para 8 estava recebendo o erro, mas sua solução corrigiu.
Nakres
8
Esta é a solução para migração para angular 8 :) obrigado
Kris Boyd
Não tenho nada em meu código que comece com, import 'core-js/...então o que devo alterar e onde? Usando VueJS 2
volume um
@volumeone execute 'npm i core-js' em seu terminal.
Shivam Shukla
1
@ShivamShukla obrigado, mas tive que fazer o downgrade para 2.6.11 para que funcionasse. Há um bug entre mini-css-extract-plugin e core-js 3
volume um
98

Encontrei uma resposta possível. Você tem o core-js versão 3.0 e esta versão não tem pastas separadas para ES6 e ES7 ; é por isso que o aplicativo não consegue encontrar os caminhos corretos.

Para resolver esse erro, você pode fazer o downgrade da versão core-js para 2.5.7. Esta versão produz uma estrutura de catálogos correta, com pastas ES6 e ES7 separadas .

Para fazer o downgrade da versão, basta executar:

npm i -S [email protected]

No meu caso, com o Angular, funciona bem.

Kamil Naja
fonte
1
Obrigado, pelo menos é uma solução. Também encontrei a solução para usar a versão 3.0 sem fazer downgrade. Postará
Gutelaunetyp
Saver, sério. Obrigado.
IRCraziestTaxi
1
Você pode explicar como o downgrade não quebra todo o resto e por que você não iria simplesmente atualizar para um novo formato? Você tem uma tonelada de votos positivos que sugere que isso está funcionando bem para as pessoas, mas certamente não é uma boa solução a longo prazo.
Simon_Weaver
Portanto, a solução perfeita é atualizar suas importações sempre que usar core-js para usar a versão mais recente. Infelizmente, quando essa dependência é usada em outra biblioteca, essa solução pode ser impossível e você precisa usar uma solução alternativa.
Kamil Naja
4
-1 Este é um band-aid para se livrar da mensagem, fazer o downgrade de seus pacotes não é uma boa prática. Os leitores ficam muito melhor corrigindo suas importações. Não só é tão simples, senão mais simples, é uma prática muito melhor: stackoverflow.com/a/56186570/610573
Chris Baker
42

Altere todos os "es6" e "es7" para "es" em seus polyfills.ts e polyfills.ts (opcional).

  • De: import 'core-js/es6/symbol';
  • Para: import 'core-js/es/symbol';
Koyuchha
fonte
21

Depois de migrado para Angular8 , core-js/es6oucore-js/es7 não funcionará.

Você tem que simplesmente substituir import core-js/es/

Por ex.

import 'core-js/es6/symbol'  

para

import 'core-js/es/symbol'

Isso funcionará corretamente.

Bhadresh Patel
fonte
Funciona para mim no Angular 8!
ihimv
Isso funciona para mim, mas ainda estou super confuso. Eu cruzei as referências com a fonte Angular esperando ver essa importação única mais recente - e até mesmo o exemplo 'hello world Ivy' ainda mostra /es6caminhos github.com/angular/angular/blob/master/integration/… Alguma ideia de por que eles estão fazendo isso?
Simon_Weaver
Mais detalhes na edição: github.com/angular/angular/issues/32228
Constantin Konstantinidis
4

Claro, tive um problema semelhante e um simples

npm uninstall @babel/polyfill --save &&
npm install @babel/polyfill --save

fez o truque para mim.

No entanto, o uso de @ babel / polyfill está obsoleto (de acordo com este comentário ), então apenas tente fazer isso se você achar que tem pacotes mais antigos instalados ou se tudo mais falhar.

otech47
fonte
1
Cara, você é um salva-vidas. Isso me deixou louco.
DiederikEEn
4
O uso de @babel/polyfillestá obsoleto.
Neurotransmissor de
3

Basta alterar "target": "es2015" para "target": "es5" no seu tsconfig.json.

Trabalhe para mim com Angular 8.2.XX

Testado no IE11 e Edge

jspassov
fonte
2

Acabou tendo um arquivo chamado polyfill.js em projectpath \ src \ polyfill.js Esse arquivo contém apenas esta linha: import 'core-js'; este polyfills não apenas es-6, mas é a maneira correta de usar core-js desde a versão 3.0.0.

Eu adicionei o polyfill.js ao meu atributo de entrada do arquivo webpack assim:

entry: ['./src/main.scss', './src/polyfill.js', './src/main.jsx']

Funciona perfeitamente.

Também encontrei mais algumas informações aqui: https://github.com/zloirock/core-js/issues/184

O autor da biblioteca ( zloirock ) afirma:

O ES6 muda o comportamento de quase todos os recursos adicionados ao ES5, então o ponto de entrada core-js / es6 inclui quase todos eles. Além disso, como você escreveu, é necessário para consertar implementações de navegador quebradas.

(Citação https://github.com/zloirock/core-js/issues/184 de zloirock)

Então eu acho que import 'core-js'; está muito bem.

Gutelaunetyp
fonte
Para informações adicionais sobre módulos e namespaces para importar, verifique a documentação atual do core-js .
Kamafeather
É possível marcar isso como a resposta correta, acho que isso é mais preciso, especialmente quase um ano depois.
doz87,
0

Faça alterações em seu arquivo Polyfills.ts

Altere todos os "es6" e "es7" para "es" em seus polyfills.ts e polyfills.ts

Pai-império
fonte