react腳手架create-react-app2.x配置less+ant3.x+router4.x+axiso創(chuàng)建一個項目

快速安裝create-react-app(以下簡稱CRA)

npm
npx create-react-app my-app
Yarn
yarn create react-app my-app


啟動項目

cd my-app
npm start

生成目錄結(jié)構(gòu)

create-react-app目錄結(jié)構(gòu)

這里的目錄非常的簡單明了环凿,CRA中有兩個非常重要的目錄srcpublic墓捻,public下的文件是存放靜態(tài)資源的文件夾,此文件是不會被webpack處理的,Public:該文件夾中的內(nèi)容不會被webpack處理,且相互之間訪問需使用前綴PUBLIC_URL吼砂。
<link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico" />。src目錄下面存放的就是我們開發(fā)時的頁面了。項目目錄下面的public和src目錄下的index文件必須存在不能改名。

  1. package.json
    package.json代碼

react-scripts

這里面多了個react-scripts膳凝,這個就是這個腳手架的核心,我們先觀摩一下這個庫的目錄

eact-scripts目錄

看到這個是不是感覺特別的熟悉恭陡,其實它就是把webpake的配置都封裝在這個庫里面蹬音,腳手架都已經(jīng)幫我們都配置好了,是不是感覺特別的簡單休玩,啥都沒做就能啟動一個項目了祟绊。
該項目支持最新的JavaScript標(biāo)準(zhǔn)的超集。除了es6的語法哥捕,create-react-app還支持:

  • 自動處理 CSS 的兼容問題,無需添加 -webkit 前綴
  • Async/await語法(ES2017)
  • 對象的解構(gòu)賦值
  • 動態(tài)import 語法
  • React嘉熊,JSX遥赚,ES6,TypeScript和Flow語法

另外官方僅僅包含了很少一個部分的ES6 polyfills:

所以當(dāng)用到一些需要polyfills的功能時,某些polyfills需要手動添加

啟動命令

npm start
啟動項目孕惜,假如有端口沖突時在package中的scripts 設(shè)置"set PORT=3003&&react-scripts start "即可完美解決愧薛。

npm build
在生產(chǎn)環(huán)境中編譯代碼,并放在build目錄中
能夠正確的打包代碼衫画,并且優(yōu)化毫炉,壓縮,使用hash重命名文件
每次打包都會把上一次余留在build的文件清空

npm test
啟動測試運(yùn)行程序

npm run eject
注意:這是一個單向操作削罩,一旦你使用eject瞄勾,那么就不能恢復(fù)了,謹(jǐn)慎使用!

  • eject其實就是將webpack配置都暴露出來费奸,這樣目錄不優(yōu)雅,CRA本身就是把webpack配置弄成一個react-scripts包隱藏起來进陡,eject后就無法享受到官方react-scripts版本更新后的更多的福利了愿阐。
  • 如果不eject那我們可以使用react-app-rewired對webpack進(jìn)行修改和新增。如果npm run eject跟我們平常的配置沒什么區(qū)別了趾疚,目錄下將新增config和scripts缨历,package.json也發(fā)生變化了。
  • 是否使用eject需要根據(jù)項目來權(quán)衡糙麦,如果您的項目需要更多的自定義辛孵,您可以“eject并自定義它,但是之后您將需要維護(hù)這個配置喳资。
eject后目錄

我們在安裝less觉吭,antd之前應(yīng)該先安裝一下修改配置文件。

react-app-rewired

react-app-rewired 是 react 社區(qū)開源的一個修改 CRA 配置的工具仆邓。
在 CRA 創(chuàng)建的項目中安裝了react-app-rewired( npm install react-app-rewired --save-dev )后鲜滩,可以通過創(chuàng)建一個config-overrides.js 文件來對 webpack 配置進(jìn)行擴(kuò)展。因此react-app-rewired不兼容CRA2了节值,但可以使用customize-cra來兼容CRA2徙硅。作者還推薦使用next.jsRazzle腳手架,它們都支持開箱即用的自定義Webpack,有空時后面在介紹這兩種使用搞疗。

安裝

  • react-app-rewire
    npm install react-app-rewired --save-dev
  • customize-cra
    npm install customize-cra --save-dev
  • 我們在根目錄新建一個config-overrides.js 文件
const {
  override,
  addLessLoader,
  addDecoratorsLegacy,
  disableEsLint,
  useBabelRc,
  addWebpackAlias
} = require('customize-cra')
const path = require('path')

module.exports = override(
  //添加修飾器 根目錄下創(chuàng)建.babelrc
  useBabelRc(),
  //禁用默認(rèn)eslint嗓蘑,使用自定義eslint,根目錄下創(chuàng)建.eslintrc.js
  disableEsLint(),
  //在傳統(tǒng)模式下添加裝飾器。一定要@babel/plugin-proposal-decorators安裝
  addDecoratorsLegacy(),
  //添加less-loader配置
  addLessLoader(),
  //配置簡化路徑
  addWebpackAlias(
    {
      '@style': path.resolve(__dirname, 'src/style'),
      '@api': path.resolve(__dirname, 'src/api'),
      '@resource': path.resolve(__dirname, 'src/resource'),
      '@components':path.resolve(__dirname, 'src/components'),
      '@config': path.resolve(__dirname, 'src/config'),
      '@pages': path.resolve(__dirname, 'src/pages'),
      '@utils': path.resolve(__dirname, 'src/utils')
    }
  )
)

上面都有注釋我就不詳細(xì)講了匿乃。就是在這前先把@babel/plugin-proposal-decorators安裝好(npm install --save-dev @babel/plugin-proposal-decorators)桩皿。
配置好之后不要完了配置啟動命令

  • package.json
 "scripts": {
    "start": "set PORT=5555 && react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject"
  },

安裝less

npm install less less-loader --save-dev

你的less好了,你可以去試試看了

安裝antd

npm install antd -save-dev

按需引用antd模塊幢炸,使用 babel-plugin-import(推薦)

npm install babel-plugin-import --save-dev

修改配置文件 .babelrc

{
  "plugins": [
    ["import", { "libraryName": "antd", "libraryDirectory": "es", "style": "css" }] // `style: true` 會加載 less 文件
  ]
}

antd 安裝成功了泄隔!

安裝react-router

npm install --save react-router

安裝react-router-dom

npm install --save react-router-dom

安裝axios

npm install --save axios

整個項目的配置和環(huán)境都弄好了,可以正式寫業(yè)務(wù)代碼了宛徊。

項目

補(bǔ)充

環(huán)境變量

  • process.env.NODE_ENVprocess.env.PUBLIC_URL讀取內(nèi)置變量佛嬉。我們設(shè)置自定義變量必須于REACT_APP_開頭
在html中引用環(huán)境變量

如:

<title>%REACT_APP_WEBSITE_NAME%</title> 
在js中引用環(huán)境變量

如:

const myName = process.env.REACT_APP.WEBSITE_NAME
設(shè)置環(huán)境變量(兩種方法)
  1. 在項目根目錄下創(chuàng)建.env文件,定義環(huán)境變量(如:REACT_APP_CODE:adfc)
    2.命令行添加
    命令行添加環(huán)境變量
多環(huán)境
  • 因為CRA只支持development闸天、production暖呕、test三個環(huán)境,當(dāng)需要對更多環(huán)境提供支持的時候(如有多個測試環(huán)境苞氮,對應(yīng)的接口都不一樣)湾揽,所以我們需要配置多環(huán)境,需要修改package.josn。

先安裝 cross-env 解決跨平臺兼容性

npm install cross-env -save

  "scripts": {
 -  "start": "react-app-rewired start",
 +  "start": "cross-env REACT_APP_ENV=development react-app-rewired start",
 -   "build": " react-app-rewired build",
 +   "build": "cross-env REACT_APP_ENV=production react-app-rewired build",
     "test": "react-app-rewired test",
     "eject": "react-scripts eject",
 +   "test1" :"cross-env REACT_APP_ENV=test1 react-app-rewired build",
 +   "test2" :"cross-env REACT_APP_ENV=test2 react-app-rewired build"
  },

修改了start钝腺、build命令抛姑,新增了test1、test2測試環(huán)境艳狐。其實這個就是通過環(huán)境變量實現(xiàn)多環(huán)境定硝。

npm run build 遇到的問題

  • 打包后打開index.html頁面空白報錯,原因是訪問路徑不對毫目,我需要設(shè)置在根目錄下蔬啡,在package.json下添加"homepage": "."

  • 包體積過大镀虐,里面包含了.map文件箱蟆,啟動了sourcemap,因此每次打包都會產(chǎn)生.map文件刮便。我們可以在命令行中去掉他空猜,“scripts”添加GENERATE_SOURCEMAP=false

"scripts": {
    "start": "cross-env REACT_APP_ENV=development react-app-rewired start",
    "build": "cross-env GENERATE_SOURCEMAP=false REACT_APP_ENV=production react-app-rewired build",
    "test": "react-app-rewired test",
    "eject": "react-scripts eject",
    "test1": "cross-env GENERATE_SOURCEMAP=false REACT_APP_ENV=test1 react-app-rewired build",
    "test2": "cross-env REACT_APP_ENV=test2 react-app-rewired build"
  },

PWA(漸進(jìn)式web應(yīng)用)

Progressive Web App簡稱 PWA,是提升 Web App 的體驗的一種新方法恨旱,能給用戶原生應(yīng)用的體驗辈毯。

  • 我們可以看到在src文件夾下有個registerServiceWorker.js,這文件其實就是注冊 service worker搜贤,它是在后臺運(yùn)行的一個線程谆沃,可以用來處理離線緩存、消息推送仪芒、后臺自動更新等任務(wù)唁影。這樣你下次訪問時,就可以更快的獲取資源掂名。而且因為資源離線緩存据沈,因此在離線或者網(wǎng)絡(luò)較差的情況下也正常訪問。注意饺蔑,registerServiceWorker注冊的service worker 只在生產(chǎn)環(huán)境中生效(process.env.NODE_ENV === 'production'),還有必須是hppts服務(wù) 卓舵。如果我們想要使用cra2提供的pwa特性的話,在build前將src/index.js下的serviceWorker.unregister() 改成serviceWorker.register()注冊service worker膀钠。
  • 在public文件夾中有個manifest.json文件。PWA 添加至桌面的功能實現(xiàn)依賴于 manifest.json裹虫,manifest.json用于指定應(yīng)用的顯示名稱、圖標(biāo)、應(yīng)用入口文件地址及需要使用的設(shè)備權(quán)限等信息疆液。也就是說用戶可以直接將站點添加快捷方式到桌面孽水,免去去應(yīng)用商店下載的麻煩。
在沒網(wǎng)和網(wǎng)弱的狀態(tài)下也能讀取到資源還能瞬間秒開,還能實現(xiàn)消息通知封救,添加應(yīng)用橫屏等等拇涤,還能將站點添加成快捷鍵放到桌面。使用PWA是不是感覺更像是原生app了誉结。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鹅士,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子惩坑,更是在濱河造成了極大的恐慌掉盅,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件以舒,死亡現(xiàn)場離奇詭異趾痘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蔓钟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門永票,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滥沫,你說我怎么就攤上這事侣集。” “怎么了佣谐?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵肚吏,是天一觀的道長。 經(jīng)常有香客問我狭魂,道長罚攀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任雌澄,我火速辦了婚禮斋泄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘镐牺。我一直安慰自己炫掐,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布睬涧。 她就那樣靜靜地躺著募胃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畦浓。 梳的紋絲不亂的頭發(fā)上痹束,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機(jī)與錄音讶请,去河邊找鬼祷嘶。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的论巍。 我是一名探鬼主播烛谊,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嘉汰!你這毒婦竟也來了丹禀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤郑现,失蹤者是張志新(化名)和其女友劉穎湃崩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體接箫,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡攒读,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辛友。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片薄扁。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖废累,靈堂內(nèi)的尸體忽然破棺而出邓梅,到底是詐尸還是另有隱情,我是刑警寧澤邑滨,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布日缨,位于F島的核電站,受9級特大地震影響掖看,放射性物質(zhì)發(fā)生泄漏匣距。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一哎壳、第九天 我趴在偏房一處隱蔽的房頂上張望毅待。 院中可真熱鬧,春花似錦归榕、人聲如沸尸红。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽外里。三九已至,卻和暖如春特石,著一層夾襖步出監(jiān)牢的瞬間级乐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工县匠, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓乞旦,卻偏偏與公主長得像贼穆,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兰粉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容