Модуль не найден: ошибка: не удается разрешить "core-js / es6"

113

У меня проблема с процессом сборки моего приложения React.

Я всегда получаю такую ​​ошибку:

Модуль не найден: ошибка: не удается разрешить "core-js / es6"

если я использую это в polyfill.js:

импортировать core-js / es6;

Это мой 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"
  }
}

Может здесь кто-нибудь помочь?

Gutelaunetyp
источник
2
Та же ошибка в приложении angular после обновления версии. Проверьте, существует ли эта папка (core-js / es6) в ваших модулях node.
Камил Наджа
@KamilNaja Я столкнулся с той же проблемой, и папка (core-js / es6) не существует в моих node_modules, у меня есть (core-js / es) в моих node_modules. Что делать?
Кунал Тяги

Ответы:

155

Импорт изменился для core-js версии 3.0.1 - например

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

теперь может быть просто предоставлено следующим

import 'core-js/es/array';

если вы предпочитаете не использовать core-js целиком

LeaveTheCapital
источник
18
после перехода с angular на 8 я получал ошибку, но ваше решение исправило ее.
Nakres
8
Это решение для перехода на angular 8 :) спасибо
Крис Бойд
У меня нет ничего в моем коде, который начинается с import 'core-js/...того, что мне следует изменить и где? Использование VueJS 2
первый том
@volumeone запустите 'npm i core-js' в своем терминале.
Шивам Шукла
1
@ShivamShukla, спасибо, но мне пришлось перейти на версию 2.6.11, чтобы она работала. Ошибка между mini-css-extract-plugin и core-js 3
первый том
99

Я нашел возможный ответ. У вас core-js версии 3.0, и в этой версии нет отдельных папок для ES6 и ES7 ; поэтому приложение не может найти правильные пути.

Чтобы устранить эту ошибку, вы можете понизить версию core-js до 2.5.7. Эта версия создает правильную структуру каталогов с отдельными папками ES6 и ES7 .

Чтобы понизить версию, просто запустите:

npm i -S core-js@2.5.7

В моем случае с Angular это работает нормально.

Камил Наджа
источник
1
Спасибо, по крайней мере, это решение. Я также нашел решение использовать версию 3.0 без перехода на более раннюю версию. Будет опубликовано
Gutelaunetyp
Спасатель жизни, серьезно. Спасибо.
IRCraziestTaxi
1
Можете ли вы объяснить, как переход на более раннюю версию не нарушает всего остального и почему вы не можете просто перейти на новый формат? У вас есть масса положительных отзывов, которые говорят о том, что это хорошо работает для людей, но, безусловно, это не очень хорошее долгосрочное решение.
Simon_Weaver
Итак, идеальное решение - обновлять свой импорт всякий раз, когда вы используете core-js, чтобы использовать последнюю версию. К сожалению, когда эта зависимость используется в другой библиотеке, это решение может быть невозможным, и вам нужно использовать обходной путь.
Камил Наджа
4
-1 Это пластырь, чтобы избавиться от сообщения, переход на более раннюю версию - не лучшая практика. Читателям гораздо лучше корректировать свой импорт. Это не только так же просто, если не проще, но и намного лучше: stackoverflow.com/a/56186570/610573
Крис Бейкер
42

Измените все «es6» и «es7» на «es» в ваших polyfills.ts и polyfills.ts (необязательно).

  • Из: import 'core-js/es6/symbol';
  • Кому: import 'core-js/es/symbol';
Коючха
источник
21

После того, как мигрировал в Angular8 , core-js/es6или core-js/es7не будет работать.

Вам нужно просто заменить import core-js/es/

Например,

import 'core-js/es6/symbol'  

к

import 'core-js/es/symbol'

Это будет работать правильно.

Бхадреш Патель
источник
У меня работает в Angular 8!
ihimv
Это работает для меня, но я все еще в замешательстве. Я сделал перекрестную ссылку на источник Angular, ожидая увидеть этот новый единственный импорт - и даже пример «привет, мир, Айви» по-прежнему показывает /es6пути github.com/angular/angular/blob/master/integration/ ... Есть идеи, зачем они это делают?
Simon_Weaver
Подробности в выпуске: github.com/angular/angular/issues/32228
Константин Константинидис
4

Конечно, у меня была аналогичная проблема и простой

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

сделал трюк для меня.

Однако использование @ babel / polyfill устарело (согласно этому комментарию ), поэтому попробуйте это, только если вы думаете, что у вас установлены более старые пакеты или если все остальное не работает.

otech47
источник
1
Чувак, ты спасатель. Это сводило меня с ума.
DiederikE
4
Использование @babel/polyfillне рекомендуется.
нейротрансмиттеров
3

В итоге в папке projectpath \ src \ polyfill.js есть файл с именем polyfill.js. Этот файл содержит только эту строку: import 'core-js'; этот полифилс не только es-6, но и является правильным способом использования core-js, начиная с версии 3.0.0.

Я добавил polyfill.js в свой атрибут записи файла webpack следующим образом:

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

Прекрасно работает.

Я также нашел здесь дополнительную информацию: https://github.com/zloirock/core-js/issues/184

Автор библиотеки ( zloirock ) утверждает:

ES6 изменяет поведение почти всех функций, добавленных в ES5, поэтому точка входа core-js / es6 включает почти все из них. Также, как вы писали, это необходимо для исправления неработающих реализаций браузера.

(Цитата https://github.com/zloirock/core-js/issues/184 из zloirock)

Итак, я думаю, что import core-js; просто отлично.

Gutelaunetyp
источник
Дополнительную информацию о модулях и пространствах имен для импорта см. В текущей документации по core-js .
Kamafeather
Можно ли отметить это как правильный ответ, я думаю, это более точный, особенно почти год спустя.
doz87
3

Просто измените "target": "es2015" на "target": "es5" в вашем tsconfig.json.

Работайте у меня с Angular 8.2.XX

Протестировано в IE11 и Edge

jspassov
источник
2

Если вы используете @babel/preset-envи useBuiltIns, вам просто нужно добавить corejs: 3рядом с параметром useBuiltIns, чтобы указать, какую версию использовать, по умолчанию corejs: 2.

presets: [
  [
    "@babel/preset-env", {
      "useBuiltIns": "usage",
      "corejs": 3
    }
  ]
],

Для получения дополнительной информации см .: https://github.com/zloirock/core-js/blob/master/docs/2019-03-19-core-js-3-babel-and-a-look-into-the-future .md # babelpreset-env

РиЗКиТ
источник
0

Внесите изменения в свой файл Polyfills.ts

Измените все "es6" и "es7" на "es" в ваших polyfills.ts и polyfills.ts

Отец-Империя
источник