详解create-react-app 2.0版本如何启用装饰器语法


Posted in Javascript onOctober 23, 2018

create-react-app(简称cra)已经更新之2.0.3版本, babel也更新至7.x版本, JavaScript装饰器语法虽然还不是标准, 但是借助于babel, 也能在项目里愉快的玩耍.

cra2.0时代如何启用装饰器语法呢? 我们依旧采用的是react-app-rewired, 通过劫持webpack cofig对象, 达到修改的目的.

yarn add react-app-rewired

修改package.json

"scripts": {
  "start": "react-app-rewired start",
  "build": "react-app-rewired build",
  "test": "react-app-rewired test"
 }

安装装饰器语法所需的babel插件, 也可以顺带升级babel-core

yarn add @babel/plugin-proposal-decorators metro-react-native-babel-preset -D

在项目根目录下创建.babelrc, config-overrides.js文件

// .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

{
 "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"
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS中Date日期函数中的参数使用介绍
Jan 02 Javascript
js中哈希表的几种用法总结
Jan 28 Javascript
js判断上传文件类型判断FileUpload文件类型代码
May 20 Javascript
学习Bootstrap组件之下拉菜单
Jul 28 Javascript
jquery彩色投票进度条简单实例演示
Jul 23 Javascript
AngularJS入门教程之过滤器用法示例
Nov 02 Javascript
AngularJS中的缓存使用
Jan 11 Javascript
模块化react-router配置方法详解
Jun 03 Javascript
Node绑定全局TraceID的实现方法
Nov 14 Javascript
Angular value与ngValue区别详解
Nov 27 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
May 10 Javascript
在Uni中使用Vue的EventBus总线机制操作
Jul 31 Javascript
彻底弄懂 JavaScript 执行机制
Oct 23 #Javascript
深入理解JavaScript 中的执行上下文和执行栈
Oct 23 #Javascript
浅谈JavaScript 代码整洁之道
Oct 23 #Javascript
使用jquery Ajax实现上传附件功能
Oct 23 #jQuery
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 #Javascript
jquery实现动态添加附件功能
Oct 23 #jQuery
Vue创建头部组件示例代码详解
Oct 23 #Javascript
You might like
常用星际术语索引(新手指南)
2020/03/04 星际争霸
PHP入门经历和学习过程分享
2014/04/11 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
jquery 笔记 事件
2011/11/02 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
原生js实现移动开发轮播图、相册滑动特效
2015/04/17 Javascript
Java中Timer的用法详解
2015/10/21 Javascript
Jquery和BigFileUpload实现大文件上传及进度条显示
2016/06/27 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
2017/07/22 Python
python分数表示方式和写法
2019/06/26 Python
基于Django ORM、一对一、一对多、多对多的全面讲解
2019/07/26 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
python3.7通过thrift操作hbase的示例代码
2020/01/14 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
Python3自定义json逐层解析器代码
2020/05/11 Python
Django URL参数Template反向解析
2020/11/24 Python
Python 里最强的地图绘制神器
2021/03/01 Python
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
意大利团购网站:Groupon意大利
2016/10/11 全球购物
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
成教毕业生自我鉴定
2013/10/23 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
优秀共青团员事迹材料
2014/12/25 职场文书
文员岗位职责
2015/02/04 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电