create-react-app的使用

2017.11.14更新

關(guān)于自定義create-react-app堕绩,我們可以選擇社區(qū)提供的解決方案react-app-rewired來滿足我們的大部分自定義需求

將所有配置文件暴露出來

運行

npm run eject

注意妒峦,這個是不可逆操作筝尾,它會將所有配置文件膜眠,包括webpack, eslint, babel的配置文件全部暴露出來低剔,以便你可以全權(quán)控制所有的配置細節(jié)歪脏,考慮到create-react-app自身的完整性技潘,如果不是萬不得已的情況,盡量不要執(zhí)行這個操作

關(guān)于使用css preprocessor

因為react官方是推薦進行組件復(fù)用分飞,而不是進行樣式復(fù)用悴务,所以在基于這個前提下,像less或者sass這樣的預(yù)處理器譬猫,所能發(fā)揮的作用非常的有限惨寿。當(dāng)然,如果你覺得你有必須這樣做的理由删窒,可以采用以下的辦法

1.使用預(yù)處理器的命令行

如使用sass
第一步,安裝

npm install --save node-sass-chokidar

第二步顺囊,添加處理命令

"scripts": {
+    "build-css": "node-sass-chokidar src/ -o src/",
+    "watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive",
     "start": "react-scripts start",
     "build": "react-scripts build",
     "test": "react-scripts test --env=jsdom"

只要運行npm run watch-css命令肌索,src目錄下的所有.sass文件都會被編譯成.css

2.修改webpack配置

運行npm run eject將所有create-react-app的配置文件暴露出來,然后修改webpack配置

添加自定義環(huán)境變量

環(huán)境變量可以讓我們在不同的環(huán)境特碳,如dev,production環(huán)境诚亚,進行不同的配置和操作,比如午乓,很常見的需求就是在dev環(huán)境我需要請求測試環(huán)境的接口站宗,而在production環(huán)境我需要請求線上接口。

使用環(huán)境變量

注意

凡是在create-react-app中自定義的環(huán)境變量益愈,都需要加上REACT_APP_前綴

在HTML中使用環(huán)境變量

<title>%REACT_APP_WEBSITE_NAME%</title>

在JS中使用環(huán)境變量

const WEBNAME = process.env.REACT_APP_WEBSITE_NAME

內(nèi)置的環(huán)境變量

create-react-app內(nèi)置有兩個環(huán)境變量梢灭,PUBLIC_URLNODE_ENV

PUBLIC_URL是靜態(tài)資源的發(fā)布路徑,在public/index.html有使用蒸其,這個默認(rèn)值是''敏释,需要自己進行配置

NODE_ENV有三個值,分別對應(yīng)如下:

  • 運行npm start摸袁,為development
  • 運行npm test钥顽,為test
  • 運行npm run build,為production

NODE_ENV的值不能手動進行覆蓋

定義環(huán)境變量

使用命令行

windows

set REACT_APP_SECRET_CODE=abcdef&&npm start

mac

REACT_APP_SECRET_CODE=abcdef npm start

使用.env文件

.env文件放在項目根目錄

REACT_APP_SECRET_CODE=abcdef

名字后面也能加后綴靠汁,不同后綴的文件對應(yīng)不同的使用情況

  • .env: 默認(rèn)使用
  • .env.local:用于本地變量覆蓋蜂大,這個文件會在除了test環(huán)境的所有環(huán)境加載
  • .env.development,.env.test,.env.production:在對應(yīng)的環(huán)境加載
  • .env.development.local,.env.test.local,.env.production.local:在對應(yīng)的環(huán)境加載闽铐,最高優(yōu)先級,會覆蓋.env.*的配置

加載的優(yōu)先級從高到低奶浦,依次為:

  • npm start: .env.development.local, .env.development, .env.local, .env
  • npm run build: .env.production.local, .env.production, .env.local, .env
  • npm test: .env.test.local, .env.test, .env (note .env.local is missing)

多環(huán)境支持

因為create-react-app只支持development,production,test三個環(huán)境兄墅,當(dāng)需要對更多環(huán)境提供支持的時候(比如,公司有兩個測試環(huán)境财喳,對應(yīng)的接口都不一樣)察迟,就需要修改下配置了。
其實很簡單耳高,只需要將create-react-app查找.env文件的一個變量(process.env.NODE_ENV)替換成自己的自定義的一個變量就行了

先運行npm run eject將所有配置項暴露出來
修改config/env.js下前面的幾行代碼中的其中一句

'use strict';

const fs = require('fs');
const path = require('path');
const paths = require('./paths');

// Make sure that including paths.js after env.js will read .env variables.
delete require.cache[require.resolve('./paths')];

//**************這句代碼******************
// const NODE_ENV = process.env.NODE_ENV; 
const NODE_ENV = process.env.FS_ENV
//...

然后扎瓶,在package.json中添加

"scripts": {
  "start": "node scripts/start.js",
  "build": "node scripts/build.js",
+ "build-test1": "set FS_ENV=test1&&node scripts/build.js",
  "test": "node scripts/test.js --env=jsdom"
},

然后在根目錄添加.env.test1,自定義的一個環(huán)境文件就能被加載了

上面是添加了一個test1環(huán)境泌枪,同理還能添加test2,test3······等等

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末概荷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子碌燕,更是在濱河造成了極大的恐慌误证,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件修壕,死亡現(xiàn)場離奇詭異愈捅,居然都是意外死亡,警方通過查閱死者的電腦和手機慈鸠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門蓝谨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人青团,你說我怎么就攤上這事譬巫。” “怎么了督笆?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵芦昔,是天一觀的道長。 經(jīng)常有香客問我娃肿,道長咕缎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任料扰,我火速辦了婚禮锨阿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘记罚。我一直安慰自己墅诡,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著末早,像睡著了一般烟馅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上然磷,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天郑趁,我揣著相機與錄音,去河邊找鬼姿搜。 笑死寡润,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的舅柜。 我是一名探鬼主播梭纹,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼致份!你這毒婦竟也來了变抽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤氮块,失蹤者是張志新(化名)和其女友劉穎绍载,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滔蝉,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡击儡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蝠引。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阳谍。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖立肘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情名扛,我是刑警寧澤谅年,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站肮韧,受9級特大地震影響融蹂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜弄企,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一超燃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拘领,春花似錦意乓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽笆凌。三九已至,卻和暖如春士葫,著一層夾襖步出監(jiān)牢的瞬間乞而,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工慢显, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留爪模,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓荚藻,卻偏偏與公主長得像屋灌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鞋喇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理声滥,服務(wù)發(fā)現(xiàn),斷路器侦香,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • GitChat技術(shù)雜談 前言 本文較長落塑,為了節(jié)省你的閱讀時間,在文前列寫作思路如下: 什么是 webpack罐韩,它要...
    蕭玄辭閱讀 12,691評論 7 110
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,804評論 6 342
  • 這有可能是有史以來假期最長的一個國慶節(jié)了散吵,中間順便還把中秋一起過了龙考。時間也過的很快,你都做了些啥呢矾睦?出去旅游晦款、購物...
    1baf5004e29b閱讀 770評論 0 0
  • 15年年底本人公司新開的一個項目,用上了mvp模式開發(fā)枚冗,那個時候還沒發(fā)現(xiàn)google出了mvp的demo缓溅。 首先什...
    大于于閱讀 23,255評論 43 87