详解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中的作用域scope介绍
Dec 28 Javascript
Javasipt:操作radio标签详解
Dec 30 Javascript
javascript+ajax实现产品页面加载信息
Jul 09 Javascript
js实现拖拽效果(构造函数)
Dec 14 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
Jan 19 Javascript
详解jQuery的Cookie插件
Nov 23 Javascript
bootstrap侧边栏圆点导航
Jan 11 Javascript
利用 spin.js 生成等待效果(js 等待效果)
Jun 25 Javascript
vue路由组件按需加载的几种方法小结
Jul 12 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
Jul 19 Javascript
8 个有用的JS技巧(推荐)
Jul 03 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
Feb 04 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
3种平台下安装php4经验点滴
2006/10/09 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
php常用表单验证类用法实例
2015/06/18 PHP
CI映射(加载)数据到view层的方法
2016/03/28 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
使用js 设置url参数
2013/07/08 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
jQuery常用知识点总结以及平时封装常用函数
2016/02/23 Javascript
几种二级联动案例(jQuery\Array\Ajax php)
2016/08/13 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
jQuery监听浏览器窗口大小的变化实例
2017/02/07 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
2017/04/04 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
bootstrap日期插件daterangepicker使用详解
2017/10/19 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
如何使用vuex实现兄弟组件通信
2018/11/02 Javascript
js实现动态时钟
2020/03/12 Javascript
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
Python实现快速多线程ping的方法
2015/07/15 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
Python八皇后问题解答过程详解
2019/07/29 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
python代码能做成软件吗
2020/07/24 Python
Too Faced官网:美国知名彩妆品牌
2017/03/07 全球购物
小学红领巾中秋节广播稿
2014/01/13 职场文书
中学教师管理制度
2014/01/14 职场文书
社团活动总结
2014/04/28 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
介绍信应该怎么开?
2019/04/03 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书
Nginx如何配置根据路径转发详解
2022/07/23 Servers