Babel 6 transform-runtime: $export is not a function

匿名 (未验证) 提交于 2019-12-03 02:49:01

问题:

I'm trying to incorporate Babel's transform-runtime to make my code compatible with IE9. But since integrating it, the code won't even run on Chrome. I get the error Uncaught TypeError: $export is not a function on es6.object.define-property.js:3. Without the "transform-runtime" line in my .babelrc, everything runs fine. Any ideas?

Here is my .babelrc:

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

And my 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'       },     ]   } }; 

回答1:

Try adding exclude: /node_modules/ after loader: 'babel-loader'. I had the same problem when trying to run the runtime transformer without excluding node_modules. I am not aware of the underlying problem, though.



回答2:

Hello I have the same issue and finally found a solution that works for me. See:

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',         ],      },   }, ] 

See the 'transform-runtime' part. I hope this helps.



回答3:

You can try replace "exclude" by "include", following the recomendations from documentation.

Try to prefer "include" when possible...

This worked for me.

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


回答4:

For those of you who are using webpack, make sure to no include the node_modules folder with the following in your webpack configuration file:

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']         }       }     }   ] } 


回答5:

Have you install also the babel-runtime?

I just installed both and added the plugin in the .babelrc and it worked out.



回答6:

It looks to be a problem with running core-js files through Babel 6 because Babel 6 no longer converts require('something') to require('something').default as Babel 5 did. I even tried running it through this plugin https://www.npmjs.com/package/babel-plugin-add-module-exports but no matter what I did, it wouldn't correct the require statements properly. I ultimately just had to exclude the core-js and various Babel related files from being processed by the babel-loader by setting the exclude property to this:

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

As a side note, I hadn't reinstalled my node_modules since converting to Babel 6 and that caused the same issue but for some other mysterious reason.



回答7:

At first you must installed babel-plugin-transform-runtime and then use it like me:

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

After it you must add exclude key to your babel-loader inside webpack configuration file:

{     test: /\.(js|jsx)$/,     exclude: /node_modules/,     use: [         {             loader: 'babel-loader',         }     ] } 

Attention: please write /node_modules/ not /(node_modules\/)/ or /node_modules\//, it's weird but this way works.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!