基于create-react-app的再配置

前面的话

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

 

环境变量

【设置】

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

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

PORT=2000

  则开发服务器会在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.4

 

配置代理

  在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'
  }
]
复制代码

   

posted @   小火柴的蓝色理想  阅读(19593)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2017-03-02 深入理解ajax系列第七篇——传递JSON
2016-03-02 CSS颜色模式转换器的实现
点击右上角即可分享
微信分享提示
显示目录
目录
[1]环境变量[2]配置代理[3]配置别名[4]配置eslint[5]配置PWA