详解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 相关文章推荐
在线编辑器的实现原理(兼容IE和FireFox)
Mar 09 Javascript
javascript 硬盘序列号+其它硬件信息
Dec 23 Javascript
JS 日期验证正则附asp日期格式化函数
Sep 11 Javascript
原生js写的放大镜效果
Aug 22 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
May 20 Javascript
AngularJS利用Controller完成URL跳转
Aug 09 Javascript
Javascript仿京东放大镜的效果
Mar 01 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
Aug 20 Javascript
微信小程序实现简单跑马灯效果
May 26 Javascript
ionic3双击返回退出应用的方法
Sep 17 Javascript
Openlayers实现测量功能
Sep 25 Javascript
Vue中computed和watch有哪些区别
Dec 19 Vue.js
彻底弄懂 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/09/05 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
php去除换行(回车换行)的三种方法
2014/03/26 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
PHP中上传多个文件的表单设计例子
2014/11/19 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
php图片添加水印例子
2016/07/20 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
JS将秒换成时分秒实现代码
2013/09/03 Javascript
用原生JS获取CLASS对象(很简单实用)
2014/10/15 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
纯js实现无限空间大小的本地存储
2015/06/18 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
javascript基础语法——全面理解变量和标识符
2016/06/02 Javascript
js canvas实现QQ拨打电话特效
2017/05/10 Javascript
JS作用域链详解
2017/06/26 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
python查找指定具有相同内容文件的方法
2015/06/28 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
Python交互环境下实现输入代码
2018/06/22 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
python getpass模块用法及实例详解
2019/10/07 Python
Python实现括号匹配方法详解
2020/02/10 Python
python IDLE添加行号显示教程
2020/04/25 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
美术教师岗位职责
2014/03/18 职场文书
干部个人对照检查材料
2014/08/25 职场文书
乡镇创先争优活动总结
2014/08/28 职场文书
文明单位创建材料
2014/12/24 职场文书
2016特色励志班级口号
2015/12/24 职场文书
《我是什么》教学反思
2016/02/16 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书