前面的话

  使用Facebook官方推出的create-react-app脚手架,我们基本可以零配置搭建基于webpack的React开发环境。但是,如果需要个性化定制,则还需要基于create-react-app进行再配置

环境变量

【设置】

  在根目录下新建.env文件,可以用于本地环境变量覆盖

  如在该文件中进行如下设置

PORT=

  则开发服务器会在2000端口开启服务

【默认】

  默认支持的环境变量有: NODE_ENV 和 PUBLIC_URL

  NODE_ENV: 该变量是自动赋值的,你不可以更改它的值,对于npm start, 它的值是develepment, npm test它的值是test, 对于npm run build, 它的值是production

  PUBLIC_URL: 这个变量可以用于引用模块系统之外的资源路径前缀

【区分环境】

  一般地,在开发端,会使用redux-logger在控制台显示触发action时的日志,但在生产端,则完全不需要。可以使用NODE_ENV环境变量来区分环境

let store = null
if (process.env.NODE_ENV === 'development') {
store = createStore(rootReducer, applyMiddleware(thunk, logger))
} else {
store = createStore(rootReducer, applyMiddleware(thunk))
}

【外部资源】

  如果要设置静态资源CDN,则需要在.env文件中设置PUBLIC_URL

PUBLIC_URL = 'cdn url'

  在HTML中使用

<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">

  在Javascript中使用

return <img src={process.env.PUBLIC_URL + '/img/logo.png'} />

【自定义】

  可以自定义环境变量,不过需要遵照一个约定,所有自定义环境变量均以REACT_APP_开头

  这些环境变量会定义在process.env中。例如,环境变量REACT_APP_SECRET_CODE会在JS中暴露为process.env.REACT_APP_SECRECT_CODE

【更新】

  目录react-scripts最新版本是1.1.4,以如下方式进行更新

npm install --save --save-exact react-scripts@1.1.

配置代理

  在package.json中配置,与其他项目同级

  "scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
},
"proxy": {
"/api": {
"target": "https://m.weibo.cn",
"changeOrigin": true,
"pathRewrite":{"^/api":""}
}
}

  由于create-react-app默认支持fetch,所以在组件中使用fetch获取数据,结果显示在了控制台中

fetch('api/comments/show?id=4199740256395164&page=1').then(res => {
res.json().then(data => {
console.log(data)
})
})

配置别名

【rewire】

  使用react-app-rewired来进行react的再配置,首先使用npm安装

$ npm install react-app-rewired --save-dev

  然后,更改package.json中的scripts部分

  "scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test --env=jsdom",
"eject": "react-app eject"
},

  然后,在根目录新建config-overrides.js文件,配置如下

const path = require('path');
function resolve(dir) {
return path.join(__dirname, '.', dir)
}
module.exports = function override(config, env) {
config.resolve.alias = {
'@': resolve('src')
}
return config;
}

  重启开发服务器后,就可以使用@来表示'src'的绝对路径了

【eject】

  或者,npm run eject之后 ,直接更改config目录下的dev.js和prod.js文件中的alias设置

    alias: {
'@': path.join(__dirname, '..', 'src'),
...
},

配置eslint

  安装插件

npm install react-app-rewired react-app-rewire-eslint --save

  在根目录下新建.eslint.js文件,文件中一定要添加如下配置

module.exports = {
"parser":"babel-eslint",
...

  否则,会报下面的错误

Parsing error: Unexpected token =

配置PWA

  create-react-app中有默认的service worker设置,但是没有对接口缓存进行处理

  下面对SWPrecacheWebpackPlugin插件的配置增加如下处理

runtimeCaching: [{
urlPattern: '/',
handler: 'networkFirst'
},
{
urlPattern: /\/(posts|categories|recommends|users)/,
handler: 'networkFirst'
},
{
urlPattern: '/posts/:id',
handler: 'networkFirst'
}
]

  

基于create-react-app的再配置的更多相关文章

  1. 如何扩展 Create React App 的 Webpack 配置

    如何扩展 Create React App 的 Webpack 配置  原文地址https://zhaozhiming.github.io/blog/2018/01/08/create-react-a ...

  2. 深入 Create React App 核心概念

    本文差点难产而死.因为总结的过程中,多次怀疑本文是对官方文档的直接翻译和简单诺列:同时官方文档很全面,全范围的介绍无疑加深了写作的心智负担.但在最终的梳理中,发现走出了一条与众不同的路,于是坚持分享出 ...

  3. tap news:week5 0.0 create react app

    参考https://blog.csdn.net/qtfying/article/details/78665664 先创建文件夹 安装create react app 这个脚手架(facebook官方提 ...

  4. 在 .NET Core 5 中集成 Create React app

    翻译自 Camilo Reyes 2021年2月22日的文章 <Integrate Create React app with .NET Core 5> [1] Camilo Reyes ...

  5. 使用create react app教程

    This project was bootstrapped with Create React App. Below you will find some information on how to ...

  6. Create React App

    Facebook开源了React前端框架(MIT Licence),也同时提供了React脚手架 - create-react-app. create-react-app遵循约定优于配置(Coc)的原 ...

  7. Create React App 安装less 报错

    执行npm run eject 暴露模块 安装 npm i  less less-loader -D 1.打开 react app 的 webpack.config.js const sassRege ...

  8. create react app的 css loader 进行局部配置

    { test: cssRegex, exclude: cssModuleRegex, use: getStyleLoaders({ importLoaders: 1, sourceMap: isEnv ...

  9. [React] Use the Fragment Short Syntax in Create React App 2.0

    create-react-app version 2.0 added a lot of new features. One of the new features is upgrading to Ba ...

  10. [React] {svg, css module, sass} support in Create React App 2.0

    create-react-app version 2.0 added a lot of new features. One of the new features is added the svgr  ...

随机推荐

  1. jupyter notebook 代码补全插件工具-nbextensions(并修改默认的工作目录)

    # conda install -c conda-forge jupyter_contrib_nbextensionsCollecting package metadata: doneSolving ...

  2. mysql 索引原理

    一.索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 我们知道,数据库查询是数据库的最主要功能之 ...

  3. 性能调优2:CPU

    关系型数据库严重依赖底层的硬件资源,CPU是服务器的大脑,当CPU开销很高时,内存和硬盘系统都会产生不必需要的压力.CPU的性能问题,直观来看,就是任务管理器中看到的CPU利用率始终处于100%,而侦 ...

  4. Groovy语言学习--语法基础(5)

    至此groovy语言学习-语法基础就结束了,新的工作已经安排下来,要干活了. 对groovy了解到一定程度之后就可以在java项目中对其进行引入了.为此新建了一个微型的项目,个人觉得千言万语不如代码实 ...

  5. Cgroups 与 Systemd

    Cgroups 是 linux 内核提供的一种机制,如果你还不了解 cgroups,请参考前文<Linux cgroups 简介>先了解 cgroups.当 Linux 的 init 系统 ...

  6. 通过 Systemd Journal 收集日志

    随着 systemd 成了主流的 init 系统,systemd 的功能也在不断的增加,比如对系统日志的管理.Systemd 设计的日志系统好处多多,这里笔者就不再赘述了,本文笔者主要介绍 syste ...

  7. OO博客作业1:第1-3周作业总结

    (1)基于度量来分析自己的程序结构 注:UML图中每个划分了的圆角矩形代表一个类或接口,箭头可代表创建.访问数据等行为.类的图形内部分为3个部分,从上到下依次是类的名称.类包含的实例变量(属性).类实 ...

  8. H5 颜色属性

    07-颜色属性 我是段落 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  9. 2017湘潭大学邀请赛G题(贪心+优先队列)

    参考博客:http://www.cnblogs.com/chendl111/p/6891770.html 题目链接:https://www.icpc.camp/contests/4mYguiUR8k0 ...

  10. c++入门之浅拷贝和深拷贝

    关于这方面的知识:见一篇精辟博文:https://blog.csdn.net/feitianxuxue/article/details/9275979