Предустановка Babel, работающая в файле .babelrc, но не в файле конфигурации Webpack

#reactjs #webpack #babeljs

#reactjs #webpack #babeljs

Вопрос:

Есть ли причина хранить предустановку Babel в .babelrc , а webpack.config.js не отдельно от возможности повторного использования .babelrc файла в другом проекте?

У меня есть приложение, которое работает должным образом, используя следующий .babelrc файл:

 {
  "presets": ["es2015", "stage-0","react"]
}
  

Я изменил приложение на другую структуру Webpack без .babelrc файла. Вот это самое webpack.config.js :

  module: {
    loaders: [
      {
        test: /(.js|.jsx)$/,
        exclude: /(node_modules)/,
        loader: 'babel',
        query: { presets: ['es2015', 'stage-0', 'react'] }
      },
  

Как ни странно, приложение перестало работать из-за проблем с синтаксическим анализом JSX и import ключевых слов внутри моего server.js файла. Это работает только тогда, когда я добавляю обратно .babelrc файл. Кто-нибудь может, пожалуйста, объяснить, почему это работает только с .babelrc файлом?

Комментарии:

1. Похоже, ваш server.js файл не использует Webpack, но полагается на babel-node / babel-register?

2. server.js файл использует Webpack.config

3. На самом деле я не знаю, что вы имеете в виду, но вы можете быть на что-то, как я нашел строку require (‘babel-core / register’) в файле сервера, но в то же время Он связывает (т.е. импортирует) файл webpack.config

4. Когда вы говорите, что он «использует» Webpack, вы имеете в виду server.js это пакет, сгенерированный Webpack, или вы имеете в виду server.js требуется в webpack.config.js ?

5. Второй, server.js требует webpack.config.js

Ответ №1:

Измените свой загрузчик на babel-loader в вашем webpack.config.js , а перед этим вам нужно установить их с помощью

 npm install babel-loader babel-core babel-preset-es2015 --save-dev
  

Также убедитесь, что вы установили babel-preset-react

команда

webpack.config.js

  module: {
    loaders: [
      {
        test: /.js?$/,
        exclude: /(node_modules|bower_components)/,
        loader: 'babel-loader',
        query: {
          presets: ['react', 'es2015', 'stage-0'],
          plugins: ['react-html-attrs', 'transform-decorators-legacy'], 
        }
      }
    ]
  },
  

Комментарии:

1. нет, к сожалению, это не ответ, поскольку он по-прежнему ничего не делает. У меня есть другие приложения, которые используют babel, подобные приведенному выше, а не babel-loader, и они все еще работают.

2. проверьте обновление вот как я использую модуль webpack, и он работает для меня. дайте мне знать, если это работает сейчас

3. нет, я добавил эти плагины, но он все еще настаивает на том, чтобы я вставил файл .babelrc.

4. ошибка заключалась в синтаксической ошибке, связанной с jsx и ‘import’ в качестве ключевого слова. Но обнаружил кое-что новое — мой оригинальный server.js файл содержал require(‘babel-core / register’), и у меня должен быть файл .babelrc для работы, однако, когда я изменил свой server.js файл, удалив ‘require(‘babel-core / register’)’; приложение работало, когдаЯ удалил .babelrc . Я действительно не понимаю, почему, я предполагаю, что babel rc означает babel register-core, поэтому требование означает, что у меня должен быть файл .babelrc

5. да, require(‘babel-core / register’) использует .babelrc с определенными в нем предустановками. Так вот в чем причина проблемы. Хорошо, что сейчас она решена

Ответ №2:

В вашей конфигурации webpack вместо передачи query опции вы можете настроить параметры babel, используя babel ключевое слово:

 babel: {
  babelrc: false,
  presets: ['react', 'es2015', 'stage-0'],
  plugins: ['react-html-attrs', 'transform-decorators-legacy']
},
modules: {
  loaders: [
    ...
  ]
}
  

Похоже, это устранило проблему для меня. К сожалению, я точно не знаю, почему это работает:-(

Вы можете видеть, что некоторые тесты babel-loader используют это для настройки параметров: https://github.com/babel/babel-loader/blob/master/test/options.test.js#L70