Webpack babel 6 ES6 decorators

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

问题:

I've got a project written in ES6 with webpack as my bundler. Most of the transpiling works fine, but when I try to include decorators anywhere, I get this error:

Decorators are not supported yet in 6.x pending proposal update.

I've looked over the babel issue tracker, and haven't been able to find anything on it there, so I'm assuming I'm using it wrong. My webpack config (the relevant bits):

loaders: [   {     loader: 'babel',     exclude: /node_modules/,     include: path.join(__dirname, 'src'),     test: /\.jsx?$/,     query: {       plugins: ['transform-runtime'],       presets: ['es2015', 'stage-0', 'react']     }   } ]

I have no trouble with anything else, arrow functions, destructuring all work fine, this is the only thing that doesn't work.

I know I could always downgrade to babel 5.8 where I had it working a while ago, but if there's any way to get this working in the current version (v6.2.0), it would help.

回答1:

This Babel plugin worked for me:

https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy

npm i --save-dev babel-plugin-transform-decorators-legacy

.babelrc

{   "presets": ["es2015", "stage-0", "react"],   "plugins": [     ["transform-decorators-legacy"],     // ...   ] }

or

Webpack

{   test: /\.jsx?$/,   loader: 'babel',   query: {     cacheDirectory: true,     plugins: ['transform-decorators-legacy' ],     presets: ['es2015', 'stage-0', 'react']   } }

React Native

With react-native you must use the babel-preset-react-native-stage-0 plugin instead.

npm i --save babel-preset-react-native-stage-0

.babelrc

{   "presets": ["react-native-stage-0/decorator-support"] }

Please see this question and answer for a complete explanation.



回答2:

After spending 5 minutes on the babeljs slack webchat, I found out that decorators are broken in the current version of babel (v6.2). The only solution seems to be to downgrade to 5.8 at this time.

It would also seem they moved their issue tracker from github to https://phabricator.babeljs.io

I write all this down, since after hours of searching I have found the current documentation very poor and lacking.



回答3:

Installing only babel-plugin-transform-decorators-legacy didn't work for me (I have a configuration using enzyme along with karma). Turns out installing transform-class-properties: transform-class-properties and also making sure that the legacy plugin is before the transform class plugin as per the docs in transform-decorators-legacy finally made it work for me.

I'm also not using a .babelrc file, but adding this to my karma.conf.js file worked for me:

babelPreprocessor: {   options: {     presets: ['airbnb', 'es2015', 'stage-0', 'react'],     plugins: ["transform-decorators-legacy", "transform-class-properties"]   } }

I also added it to my loaders:

loaders: [   {     test: /\.js$/,     loader: 'babel',     exclude: path.resolve(__dirname, 'node_modules'),     query: {       presets: ['airbnb', 'es2015', 'stage-0', 'react'],       plugins: ["transform-decorators-legacy", "transform-class-properties"]     }   },


回答4:

You just need a transform decorators plugin: http://babeljs.io/docs/plugins/transform-decorators/



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