详解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 相关文章推荐
在网页里看flash的trace数据的js类
Jan 10 Javascript
jquery Firefox3.5中操作select的问题
Jul 10 Javascript
一个JavaScript操作元素定位元素的实例
Oct 29 Javascript
JS绘制生成花瓣效果的方法
Aug 05 Javascript
浅谈Node.js:fs文件系统模块
Dec 08 Javascript
Vue实例简单方法介绍
Jan 20 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
Mar 09 Javascript
Vue.js弹出模态框组件开发的示例代码
Jul 26 Javascript
JS获取当前地理位置的方法
Oct 25 Javascript
Angular使用过滤器uppercase/lowercase实现字母大小写转换功能示例
Mar 27 Javascript
微信小程序身份证验证方法实现详解
Jun 28 Javascript
纯js实现无缝滚动功能代码实例
Feb 21 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中替换键名的简易方法示例详解
2014/01/07 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
在openSUSE42.1下编译安装PHP7 的方法
2015/12/24 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
类似GMAIL的Ajax信息反馈显示
2010/02/16 Javascript
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
2010/08/16 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
2015/10/21 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
在vue项目中使用sass的配置方法
2018/03/20 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
Python通过命令开启http.server服务器的方法
2017/11/04 Python
python利用Opencv实现人脸识别功能
2019/04/25 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
Python @property装饰器原理解析
2020/01/22 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
美国顶级品牌男士大码服装店:DXL
2017/08/30 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
《画家乡》教学反思
2014/04/22 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
宇宙与人观后感
2015/06/05 职场文书
军训后的感想
2015/08/07 职场文书
golang如何去除多余空白字符(含制表符)
2021/04/25 Golang