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?


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


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 core-js@2.5.7

No meu caso, com o Angular, funciona bem.


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

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.


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


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.


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


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.


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

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.