详解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 相关文章推荐
各种效果的jquery ui(接口)介绍
Sep 17 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
May 14 Javascript
caller和callee的区别介绍及演示结果
Mar 10 Javascript
浅谈javascript中的call、apply、bind
Mar 06 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
Aug 11 Javascript
jquery插件uploadify多图上传功能实现代码
Aug 12 Javascript
jQuery与JavaScript节点创建方法的对比
Nov 18 Javascript
JavaScript输入框字数实时统计更新
Jun 17 Javascript
vue axios登录请求拦截器
Apr 02 Javascript
浅谈JS对象添加getter与setter的5种方法
Jun 09 Javascript
Element输入框带历史查询记录的实现示例
Jan 15 Javascript
vue实现条件叠加搜索的解决方法
May 28 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 Token(令牌)设计
2008/03/15 PHP
php实现下载限制速度示例分享
2014/02/13 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
py中的目录与文件判别代码
2008/07/16 Python
python下10个简单实例代码
2017/11/15 Python
python代码实现ID3决策树算法
2017/12/20 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
Python模块WSGI使用详解
2018/02/02 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
selenium跳过webdriver检测并模拟登录淘宝
2019/06/12 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
详解使用canvas保存网页为pdf文件支持跨域
2018/11/23 HTML / CSS
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
销售经理岗位职责
2014/03/16 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
教师节校长致辞
2015/07/31 职场文书
《我是什么》教学反思
2016/02/16 职场文书
话题作文之成长
2019/12/09 职场文书