Babel изучает package.json целевого модуля на предмет конфигурации при переносе

У меня проблема, когда я хочу перенести оператор ... распространения пакета, который я использую.

Обратите внимание, что я использую babel 6 в контексте извлеченного приложения create-response-app в версии скриптов 1.1.5. У меня для этого есть минимальное воспроизведение.

Я не могу найти его сейчас, но я использую технику, предложенную в какой-то документации babel, где я добавляю это в свою конфигурацию веб-пакета:

                {
            test: /\.m?js$/,
            exclude: {
              test: /(node_modules)/, // Exclude libraries in node_modules ...
              not: [

                /@monaco-editor\/react/
              ]
            },
            use: {
              loader: require.resolve('babel-loader'),
              options: {

                "plugins": [
                  [require.resolve("babel-plugin-transform-object-rest-spread"), { "useBuiltIns": true }]]
                
              }
            }
          },

По сути, говоря: «Не переносите ничего в node_modules, кроме этого одного пакета, и переносите его с помощью этого плагина».

У меня проблема, когда вы запускаете это, вы получаете эту ошибку:

      ./node_modules/@monaco-editor/react/lib/es/index.js
Module build failed: Error: Couldn't find preset "@babel/preset-env" relative to directory "/Users/djohnston/git/cra1/node_modules/@monaco-editor/react"
    at Array.map (<anonymous>)

Обратите внимание, что пресет babel, на который он жалуется, - это пресет babel 7 @ babel / preset-env, тогда как я использую babel 6.

Однако - если вы перейдете в node_modules/@monaco-editor/react/package.json и удалите из него следующее свойство babel:

        "babel": {
    "presets": [
      "@babel/preset-env",
      "@babel/preset-react"
    ]
  },

Затем код начинает работать.

Это говорит мне о том, что babel изучает package.json и решает начать использовать @ babel / preset-env, чтобы начать его транспиляцию, вместо того, чтобы использовать только конфигурацию, указанную в моей конфигурации webpack.

Почему Babel делает это и есть ли вариант конфигурации, который я могу использовать для решения этой проблемы?

Минимальное воспроизведение этой проблемы: https://github.com/dwjohnston/cra1-monaco/tree/eject-solve-attempt

Проблема с @monaco-editor / response, которую я поднял по поводу этой проблемы (с просьбой перенести оператор распространения: https://github.com/suren-atoyan/monaco-react/issues/221)

1 ответ

Babel 6 очень агрессивно относился к чтению файлов конфигурации, что было проблемой именно по причинам, с которыми вы столкнулись. Babel 7 изменил режим чтения файла конфигурации, чтобы избежать этих проблем.

Единственный вариант в этом случае - явно указать Babel 6 пропустить .babelrc/ package.json обработка путем передачи babelrc: false к babel-loader в его опциях.

Другие вопросы по тегам