Nie znaleziono modułu: Błąd: nie można rozwiązać „core-js / es6”

113

Mam problem z procesem kompilacji w odniesieniu do mojej aplikacji React.

Zawsze otrzymuję następujący błąd:

Nie znaleziono modułu: Błąd: nie można rozwiązać „core-js / es6”

jeśli użyję tego w pliku polyfill.js:

import „core-js / es6”;

To jest mój 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"
  }
}

Czy ktoś może tu pomóc?

Gutelaunetyp
źródło
2
Ten sam błąd w aplikacji kątowej po aktualizacji wersji. Sprawdź, czy ten folder (core-js / es6) istnieje w modułach węzłów.
Kamil Naja
@KamilNaja Mam ten sam problem i folder (core-js / es6) nie istnieje w moich node_modules, mam (core-js / es) w moich node_modules. Co robić?
Kunal Tyagi

Odpowiedzi:

155

Importy zmieniły się dla core-js w wersji 3.0.1 - na przykład

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

można teraz zapewnić po prostu przez następujące

import 'core-js/es/array';

jeśli wolisz nie wprowadzać całego core-js

LeaveTheCapital
źródło
18
po migracji kątowej na 8 otrzymywałem błąd, ale Twoje rozwiązanie go naprawiło.
Nakres
8
To jest rozwiązanie na migrację do kątowej 8 :) dziękuję
Kris Boyd
W moim kodzie nie ma niczego, co zaczyna się od, import 'core-js/...więc co mam zmienić i gdzie? Korzystanie z VueJS 2
tom pierwszy
@volumeone uruchom 'npm i core-js' w swoim terminalu.
Shivam Shukla
1
@ShivamShukla dzięki, ale musiałem obniżyć wersję do wersji 2.6.11, aby to zadziałało. Wystąpił błąd między mini-css-extract-plugin a core-js 3
tom pierwszy
99

Znalazłem możliwą odpowiedź. Masz wersję 3.0 core-js , a ta wersja nie ma oddzielnych folderów dla ES6 i ES7 ; dlatego aplikacja nie może znaleźć poprawnych ścieżek.

Aby rozwiązać ten błąd, możesz obniżyć wersję core-js do 2.5.7. Ta wersja tworzy poprawną strukturę katalogów z oddzielnymi folderami ES6 i ES7 .

Aby obniżyć wersję, po prostu uruchom:

npm i -S [email protected]

W moim przypadku z Angularem to działa dobrze.

Kamil Naja
źródło
1
Dzięki, to przynajmniej rozwiązanie. Znalazłem również rozwiązanie pozwalające na korzystanie z wersji 3.0 bez obniżania wersji. Zaksięguje
Gutelaunetyp
Ratujący życie, poważnie. Dziękuję Ci.
IRCraziestTaxi
1
Czy możesz wyjaśnić, w jaki sposób obniżenie oceny nie zepsuje wszystkiego innego i dlaczego nie zaktualizowałbyś po prostu do nowego formatu? Masz mnóstwo głosów pozytywnych, co sugeruje, że działa to dobrze dla ludzi, ale z pewnością nie jest to dobre rozwiązanie długoterminowe.
Simon_Weaver
Idealnym rozwiązaniem jest więc uaktualnianie importu za każdym razem, gdy używasz core-js do korzystania z najnowszej wersji. Niestety, gdy ta zależność jest używana w innej bibliotece, to rozwiązanie może być niemożliwe i należy zastosować obejście.
Kamil Naja
4
-1 To jest pomoc zespołowa, aby pozbyć się tego komunikatu, obniżanie wersji pakietów nie jest dobrą praktyką. Czytelnikom znacznie lepiej jest skorygować import. Nie tylko jest to tak samo proste, jeśli nie prostsze, to znacznie lepsza praktyka: stackoverflow.com/a/56186570/610573
Chris Baker
42

Zmień wszystkie „es6” i „es7” na „es” w plikach polyfills.ts i polyfills.ts (opcjonalnie).

  • Z: import 'core-js/es6/symbol';
  • Do: import 'core-js/es/symbol';
Koyuchha
źródło
21

Po migracji do Angular8 , core-js/es6lub core-js/es7nie będzie działać.

Musisz po prostu zastąpić import core-js/es/

Na przykład.

import 'core-js/es6/symbol'  

do

import 'core-js/es/symbol'

To zadziała poprawnie.

Bhadresh Patel
źródło
U mnie działa w Angular 8!
ihimv
To działa dla mnie, ale nadal jestem bardzo zdezorientowany. Odwołałem się do źródła Angular, spodziewając się, że zobaczę ten nowszy pojedynczy import - a nawet przykład „hello world Ivy” nadal pokazuje /es6ścieżki github.com/angular/angular/blob/master/integration/… Jakieś pomysły, dlaczego to robią?
Simon_Weaver
Więcej szczegółów w numerze: github.com/angular/angular/issues/32228
Constantin Konstantinidis
4

Jasne, miałem podobny problem i prosty

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

załatwił sprawę dla mnie.

Jednak użycie @ babel / polyfill jest przestarzałe (zgodnie z tym komentarzem ), więc spróbuj tego tylko wtedy, gdy myślisz, że masz zainstalowane starsze pakiety lub jeśli wszystko inne zawiedzie.

otech47
źródło
1
Koleś, ratujesz życie. Doprowadziło mnie to do szału.
DiederikE
4
Użycie programu @babel/polyfilljest przestarzałe.
Neurotransmitter
3

Skończyło się na tym, że plik o nazwie polyfill.js był w ścieżce projektu \ src \ polyfill.js Ten plik zawiera tylko tę linię: import 'core-js'; to polyfill nie tylko es-6, ale jest poprawnym sposobem używania core-js od wersji 3.0.0.

Dodałem polyfill.js do mojego atrybutu wpisu pliku webpack w następujący sposób:

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

Działa świetnie.

Znalazłem też więcej informacji tutaj: https://github.com/zloirock/core-js/issues/184

Autor biblioteki ( zloirock ) twierdzi:

ES6 zmienia zachowanie prawie wszystkich funkcji dodanych w ES5, więc punkt wejścia core-js / es6 zawiera prawie wszystkie z nich. Ponadto, jak napisałeś, jest to wymagane do naprawy zepsutych implementacji przeglądarek.

(Cytat https://github.com/zloirock/core-js/issues/184 ze zloirock)

Myślę więc, że importujemy „core-js”; jest w porządku.

Gutelaunetyp
źródło
Aby uzyskać dodatkowe informacje na temat modułów i przestrzeni nazw do zaimportowania, zapoznaj się z aktualną dokumentacją core-js .
Kamafeather
Czy można to oznaczyć jako poprawną, myślę, że jest to dokładniejsze, zwłaszcza prawie rok później.
doz87
3

Po prostu zmień „target”: „es2015” na „target”: „es5” w pliku tsconfig.json.

Pracuj dla mnie z Angular 8.2.XX

Testowane na IE11 i Edge

jspassov
źródło
0

Wprowadź zmiany w pliku Polyfills.ts

Zmień wszystkie „es6” i „es7” na „es” w plikach polyfills.ts i polyfills.ts

Ojcze Imperium
źródło