基於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'
  }
]

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM