react-mobx,mobx,注解依赖于 @babel/plugin-proposal-decorators。javascript
7.0 - 7.1.x 阶段,@babel/plugin-proposal-decorators 的声明必须优先于 @babel/plugin-proposal-class-properties,相似以下:java
options: { presets: ['@babel/preset-env', '@babel/preset-react'], plugins: [ ['@babel/plugin-proposal-decorators', { "legacy": true }], ['@babel/plugin-proposal-class-properties', { "loose": true }], '@babel/plugin-transform-modules-commonjs', '@babel/plugin-transform-block-scoping', '@babel/plugin-transform-computed-properties', '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-transform-async-to-generator', '@babel/plugin-transform-regenerator' ] }
此时的 babel package 环境以下:react
{ "@babel/core": "^7.1.6", "@babel/plugin-proposal-class-properties": "^7.1.0", "@babel/plugin-proposal-decorators": "^7.2.0", "@babel/plugin-proposal-object-rest-spread": "^7.0.0", "@babel/plugin-transform-async-to-generator": "^7.1.0", "@babel/plugin-transform-block-scoping": "^7.1.5", "@babel/plugin-transform-computed-properties": "^7.0.0", "@babel/plugin-transform-modules-commonjs": "^7.1.0", "@babel/plugin-transform-regenerator": "^7.0.0", "@babel/polyfill": "^7.0.0", "@babel/preset-env": "^7.1.6", "@babel/preset-react": "^7.0.0", }
babel 升级到 7.2,任意一个 babel 的plugin,特别是 @babel/plugin-proposal-decorators 或 @babel/plugin-proposal-class-properties 中的任意一个,只要升级了(后安装),就要所有都升级到 7.2 。后端
不然就是就会出现针对注解的代码,提示以下错误(即7.0 - 7.1 @babel/core 调用 7.2 的 plugins):babel
SyntaxError: [文件].js: Decorators transform is necessary.async
头疼,比后端依赖库管理还复杂。插件
package 各插件依赖信息以下:rest
{ "@babel/core": "^7.2.2", "@babel/plugin-proposal-class-properties": "^7.2.3", "@babel/plugin-proposal-decorators": "^7.2.3", "@babel/plugin-proposal-object-rest-spread": "^7.2.0", "@babel/plugin-transform-async-to-generator": "^7.2.0", "@babel/plugin-transform-block-scoping": "^7.2.0", "@babel/plugin-transform-computed-properties": "^7.2.0", "@babel/plugin-transform-modules-commonjs": "^7.2.0", "@babel/plugin-transform-regenerator": "^7.0.0", "@babel/polyfill": "^7.0.0", "@babel/preset-env": "^7.1.6", "@babel/preset-react": "^7.0.0", }
该影响只关联 babel 的插件,不关联 preset 和 polyfill runtime 系列。code