详解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 相关文章推荐
javascript css在IE和Firefox中区别分析
Feb 18 Javascript
js 字符串转换成数字的三种方法
Mar 23 Javascript
浅析如何利用JavaScript进行语音识别
Oct 27 Javascript
BootStrap整体框架之基础布局组件
Dec 15 Javascript
详解百度百科目录导航树小插件
Jan 08 Javascript
Bootstrap实现的标签页内容切换显示效果示例
May 25 Javascript
前端主流框架vue学习笔记第一篇
Jul 26 Javascript
vue+express 构建后台管理系统的示例代码
Jul 19 Javascript
Vue slot用法(小结)
Oct 22 Javascript
基于element-ui组件手动实现单选和上传功能
Dec 06 Javascript
JavaScript 严格模式(use strict)用法实例分析
Mar 04 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
Feb 05 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
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
关于PHP虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
use jscript with List Proxy Server Information
2007/06/11 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
Bootstrap3 内联单选和多选框
2016/12/29 Javascript
详解node+express+ejs+bootstrap构建项目
2017/09/27 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
使用python为mysql实现restful接口
2018/01/05 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
使用python+whoosh实现全文检索
2019/12/09 Python
pytorch动态网络以及权重共享实例
2020/01/06 Python
python——全排列数的生成方式
2020/02/26 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
大三毕业自我鉴定
2014/01/15 职场文书
餐饮收银员岗位职责
2014/02/07 职场文书
餐厅楼面部长岗位职责范文
2014/02/16 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
2014年纪检工作总结
2014/11/12 职场文书
小学教师节活动总结
2015/03/20 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
创业计划书之物流运送
2019/09/17 职场文书
python小型的音频操作库mp3Play
2022/04/24 Python
前端框架ECharts dataset对数据可视化的高级管理
2022/12/24 Javascript