Подтвердить что ты не робот

Babel 6 transform-runtime: $export не является функцией

Я пытаюсь включить Babel transform-runtime, чтобы сделать мой код совместимым с IE9. Но после его интеграции, код не будет работать даже в Chrome. Я получаю ошибку Uncaught TypeError: $export is not a function на es6.object.define-property.js:3. Без строки "transform-runtime" в моем .babelrc все работает нормально. Любые идеи?

Вот мой .babelrc:

{
  "plugins": [
    "transform-runtime"
  ],
  "presets": [
    "es2015",
    "react"
  ]
}

И мой webpack.config.js:

var webpack = require('webpack');

var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js');

module.exports = {
  entry: {
    EventAdmin: './src/event_admin',
    EventRender: './src/event_render'
  },
  output: {
    path: '../public/js2',
    filename: '[name].js' // Template based on keys in entry above
  },
  externals: {
    // require("jquery") is external and available
    //  on the global var jQuery
    'jquery': 'jQuery'
  },
  plugins: [commonsPlugin],
  devtool: 'source-map',
  module: {
    loaders: [
      { test: /\.css$/, loader: 'style-loader!css-loader' },
      {
        test: /\.js$/,
        loader: 'babel-loader'
      },
    ]
  }
};

введите описание изображения здесь

4b9b3361

Ответ 1

Попробуйте добавить exclude: /node_modules/ после loader: 'babel-loader'. У меня была такая же проблема при попытке запустить трансформатор времени без исключения node_modules. Однако я не знаю об основной проблеме.

Ответ 2

Здравствуйте, у меня такая же проблема, и я нашел решение, которое работает для меня. См.:

loaders: [
  {
    test: /.js/,
    loader: 'babel',
    query: {
      presets: ['es2015', 'es2017'],
      plugins: [
        ['transform-runtime', {
          helpers: false,
          polyfill: false,
          regenerator: true, }],
        'transform-es2015-destructuring',
        'transform-object-rest-spread',
        'transform-async-to-generator',
        ],
     },
  },
]

См. часть "время преобразования". Надеюсь, это поможет.

Ответ 3

Вы можете попробовать заменить "exclude" на "include", следуя рекомендациям документации.

Попытайтесь предпочесть "включить", когда это возможно...

Это сработало для меня.

{
  "test": /\.js/,
  "loader": "babel",
  "include": [path.resolve(__dirname, './src')]
}

Ответ 4

У вас install также время выполнения babel?

Я только что установил оба и добавил плагин в .babelrc, и он сработал.

Ответ 5

Кажется, проблема связана с запуском файлов core-js через Babel 6, потому что Babel 6 больше не преобразует require('something') в require('something').default, как это делал Babel 5. Я даже попробовал запустить его через этот плагин https://www.npmjs.com/package/babel-plugin-add-module-exports, но независимо от того, что я сделал, он не исправил бы инструкции require должным образом. В конечном итоге мне просто пришлось исключить core-js и различные файлы, связанные с Babel, с помощью babel-loader, установив для этого свойство exclude:

[ /node_modules\/babel-/m, /node_modules\/core-js\//m, /node_modules\/regenerator-runtime\//m ]

В качестве дополнительной заметки я не переустанавливал свой node_modules с момента перехода на Babel 6, и это вызывало ту же проблему, но по какой-то другой таинственной причине.

Ответ 6

Для тех из вас, кто использует веб-пакет, не забудьте включить в папку конфигурации node_modules следующую папку в файле конфигурации webpack:

module: {
  rules: [
    {
      test: /\.js$/,
      // With this line, make sure you only include your javascript
      // source files
      include: [ path.resolve(__dirname, './src') ],
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['env'],
          plugins: ['transform-runtime']
        }
      }
    }
  ]
}