Проблема при переходе с babel-preset-es2015 на babel-preset-env в проектах React и Webpack

У меня есть проект React, который использовал babel-preset-es2015, который отлично собирался с webpack, но с тех пор, как я перешел на babel-preset-env, сборка модуля завершилась неудачно.

Появляется это сообщение об ошибке:

ERROR in ./src/index.js
Module build failed: Error: Couldn't find preset "es2015" relative to directory "/path/to/project"
    at /path/to/project/node_modules/babel-core/lib/transformation/file/options/option-manager.js:293:19
    at Array.map (<anonymous>)
    at OptionManager.resolvePresets (/path/to/project/node_modules/babel-core/lib/transformation/file/options/option-manager.js:275:20)
    at OptionManager.mergePresets (/path/to/project/node_modules/babel-core/lib/transformation/file/options/option-manager.js:264:10)
    at OptionManager.mergeOptions (/path/to/project/node_modules/babel-core/lib/transformation/file/options/option-manager.js:249:14)
    at OptionManager.init (/path/to/project/node_modules/babel-core/lib/transformation/file/options/option-manager.js:368:12)
    at File.initOptions (/path/to/project/node_modules/babel-core/lib/transformation/file/index.js:212:65)
    at new File (/path/to/project/node_modules/babel-core/lib/transformation/file/index.js:135:24)
    at Pipeline.transform (/path/to/project/node_modules/babel-core/lib/transformation/pipeline.js:46:16)
    at transpile (/path/to/project/node_modules/babel-loader/lib/index.js:50:20)
    at Object.module.exports (/path/to/project/node_modules/babel-loader/lib/index.js:175:20)

Ниже приведены мои конфигурации веб-пакетов:

РАБОТАЕТ (с babel-preset-2015)

module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [
              'es2015',
              'react',
              'stage-1']
          }
        }
      }
    ]
  },
  ...
};

НЕ РАБОТАЕТ (с babel-preset-env)

module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [
              'env',
              'react',
              'stage-1']
          }
        }
      }
    ]
  },
  ...
};

package.json зависимости:

"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-preset-env": "^1.6.0"

person Jimmy Nguyen    schedule 12.10.2017    source источник
comment
Это странно. Вы пробовали удалить node_modules и сделать новый npm install?   -  person Oblosys    schedule 13.10.2017
comment
Вы обновили файл .babelrc?   -  person Thomas Hennes    schedule 13.10.2017
comment
@Oblosys у меня есть, и это не помогло.   -  person Jimmy Nguyen    schedule 13.10.2017
comment
@Jaxx У меня не было .babelrc. Нужен ли он мне, если у меня есть предустановки в разделе «Параметры» в файле webpack?   -  person Jimmy Nguyen    schedule 13.10.2017
comment
Нет, это нормально, если вы используете поле параметров, но если оно у вас было, и вы забыли его обновить, это могло вызвать помехи, поэтому мой вопрос.   -  person Thomas Hennes    schedule 13.10.2017
comment
Странно то, что в соответствии с вашей ошибкой некоторая часть вашего приложения продолжает ссылаться на предустановку es2015, даже если вы переключились на env. Таким образом, ошибка на самом деле не в том, что env-preset не работает, это скорее проблема взаимодействия с устаревшим фрагментом кода. Вы можете попробовать то, что предлагает @Oblosys. Полный поиск проекта для es2015 также может дать кое-что интересное.   -  person Thomas Hennes    schedule 13.10.2017
comment
@Jaxx, добавивший файл .babelrc, похоже, решил проблему. Я добавил подробности в разделе ответов.   -  person Jimmy Nguyen    schedule 13.10.2017
comment
Я всегда использую файл .babelrc в своих проектах после того, как столкнулся с проблемами, аналогичными той, что была у вас. Но, честно говоря, для меня до сих пор остается загадкой, почему поле options в конфигурации babel-loader не дает точно таких же результатов, как при использовании файла .babelrc. Вероятно, это связано с тем, как работает Babel, но все же ... В любом случае, рад, что ваша проблема решена.   -  person Thomas Hennes    schedule 13.10.2017


Ответы (1)


Поэтому я добавил файл .babelrc и переместил туда параметры загрузчика, и теперь все работает нормально. Все еще не уверен, почему он не работает внутри модуля webpack.

Webpack

module.exports = {
  ...
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: 'babel-loader'
      }
    ]
  },
  ...
};

.babelrc

{
  "presets": [
    "env",
    "react",
    "stage-1"
  ]
}
person Jimmy Nguyen    schedule 12.10.2017