详解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 相关文章推荐
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
Apr 12 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
Mar 20 Javascript
innerText 使用示例
Jan 23 Javascript
Node.js开启Https的实践详解
Oct 25 Javascript
vue.js加载新的内容(实例代码)
Jun 01 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
Aug 11 Javascript
vue组件实现弹出框点击显示隐藏效果
Oct 26 Javascript
JS实现倒计时图文效果
Nov 17 Javascript
Vue 实现一个命令式弹窗组件功能
Sep 25 Javascript
Vue toFixed保留两位小数的3种方式
Oct 23 Javascript
javascript实现点击小图显示大图
Nov 29 Javascript
Javascript中Microtask和Macrotask鲜为人知的知识点
Apr 02 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
很好用的PHP数据库类
2009/05/27 PHP
php学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
深入分析PHP优化及注意事项
2016/07/04 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
IE、FF、Chrome浏览器中的JS差异介绍
2013/08/13 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
js中跨域方法原理详解
2015/07/19 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
使用JavaScript实现点击循环切换图片效果
2017/09/03 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
python fabric实现远程部署
2017/01/05 Python
Python全排列操作实例分析
2018/07/24 Python
kafka-python批量发送数据的实例
2018/12/27 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
法院授权委托书范文
2014/08/02 职场文书
机械操作工岗位职责
2014/08/08 职场文书
表扬稿范文
2015/01/17 职场文书
大学教师个人总结
2015/02/10 职场文书
聘任合同书
2015/09/21 职场文书
2016春季运动会前导词
2015/11/25 职场文书
php远程请求CURL案例(爬虫、保存登录状态)
2021/04/01 PHP
html中两种获取标签内的值的方法
2022/06/16 jQuery