详解create-react-app 2.0版本如何启用装饰器语法
Posted xanthedsf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解create-react-app 2.0版本如何启用装饰器语法相关的知识,希望对你有一定的参考价值。
create-react-app(简称cra)已经更新之2.0.3版本, babel也更新至7.x版本, javascript装饰器语法虽然还不是标准, 但是借助于babel, 也能在项目里愉快的玩耍.
cra2.0时代如何启用装饰器语法呢? 我们依旧采用的是react-app-rewired, 通过劫持webpack cofig对象, 达到修改的目的.
1
|
yarn add react-app-rewired |
修改package.json
1
2
3
4
5
|
"scripts" : { "start" : "react-app-rewired start" , "build" : "react-app-rewired build" , "test" : "react-app-rewired test" } |
安装装饰器语法所需的babel插件, 也可以顺带升级babel-core
1
|
yarn add @babel/plugin-proposal-decorators metro-react-native-babel-preset -D |
在项目根目录下创建.babelrc, config-overrides.js文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
// .babelrc { "presets" : [ "module:metro-react-native-babel-preset" ], "plugins" : [ [ "@babel/plugin-proposal-decorators" , { "legacy" : true } ] ] } // config-overrides const { getBabelLoader } = require( ‘react-app-rewired‘ ); const path = require( ‘path‘ ); module.exports = function override(config, env) { const babelLoader = getBabelLoader(config.module.rules); const pwd = path.resolve(); babelLoader.include = [path.normalize(`${pwd}/src`)]; // use babelrc babelLoader.options.babelrc = true ; return config; }; |
原理就是劫持了config对象, 对其babel规则进行简单的修改.
附上完整的package.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
{ "name" : "my-react-project" , "version" : "0.1.0" , "private" : true , "dependencies" : { "react" : "^16.5.2" , "react-app-rewired" : "^1.6.2" , "react-dom" : "^16.5.2" , "react-scripts" : "2.0.5" }, "scripts" : { "start" : "react-app-rewired start" , "build" : "react-app-rewired build" , "test" : "react-app-rewired test" }, "eslintConfig" : { "extends" : "react-app" }, "browserslist" : [ ">0.2%" , "not dead" , "not ie <= 11" , "not op_mini all" ], "devDependencies" : { "@babel/plugin-proposal-decorators" : "^7.1.2" , "metro-react-native-babel-preset" : "^0.48.1" , "webpack-bundle-analyzer" : "^3.0.3" } } |
以上是关于详解create-react-app 2.0版本如何启用装饰器语法的主要内容,如果未能解决你的问题,请参考以下文章