Babel 6 transform-runtime: $export не является функцией
Я пытаюсь включить среду выполнения Babel, чтобы мой код был совместим с 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'
},
]
}
};
7 ответов
Попробуйте добавить exclude: /node_modules/
после loader: 'babel-loader'
, У меня была такая же проблема при попытке запустить преобразователь времени выполнения без исключения node_modules. Я не в курсе основной проблемы, хотя.
Здравствуйте, у меня та же проблема и, наконец, нашел решение, которое работает для меня. Увидеть:
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',
],
},
},
]
Смотрите часть 'transform-runtime'. Надеюсь, это поможет.
Вы можете попробовать заменить "исключить" на "включить", следуя рекомендациям из документации.
Старайтесь предпочитать "включать", когда это возможно...
Это сработало для меня.
{
"test": /\.js/,
"loader": "babel",
"include": [path.resolve(__dirname, './src')]
}
Сначала вы должны установить babel-plugin-transform-runtime
и затем используйте это как я:
{
"presets": [
"es2015",
"react",
"stage-0"
],
"plugins": [
"transform-runtime"
]
}
После этого вы должны добавить exclude
ключ к вашему babel-loader
внутри webpack
конфигурационный файл:
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: [
{
loader: 'babel-loader',
}
]
}
Внимание: пожалуйста, напишите /node_modules/
не /(node_modules\/)/
или же /node_modules\//
Странно, но этот способ работает.
Для тех из вас, кто использует веб-пакет, не забудьте включить node_modules
папка со следующим в вашем файле конфигурации веб-пакета:
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']
}
}
}
]
}
Похоже, проблема с запуском core-js
файлы через Вавилон 6, потому что Вавилон 6 больше не конвертирует require('something')
в require('something').default
как сделал Вавилон 5. Я даже пытался запустить его через этот плагин https://www.npmjs.com/package/babel-plugin-add-module-exports но, что бы я ни делал, он не будет корректно исправлять операторы require. Я в конечном итоге просто должен был исключить core-js
и различные связанные с Вавилоном файлы от обработки babel-loader
установив exclude
Свойство к этому:
[
/node_modules\/babel-/m,
/node_modules\/core-js\//m,
/node_modules\/regenerator-runtime\//m
]
Как примечание, я не переустанавливал node_modules
после перехода на Вавилон 6, и это вызвало ту же проблему, но по какой-то другой таинственной причине.
Вы устанавливаете также Babel-Runtime?
Я просто установил оба и добавил плагин в.babelrc, и это сработало.