從零開始搭建React+TypeScript項(xiàng)目

前陣子在自己學(xué)習(xí)React晶框,一直想在項(xiàng)目上試試React+TypeScript結(jié)合的模式拐纱。但是手頭的一直都在使用VUE于毙,現(xiàn)在終于有新項(xiàng)目來臨,毫不猶豫的選擇用TS+React來構(gòu)建這個(gè)項(xiàng)目搬泥!

主要的依賴:

React16.12+

TypeScript3+

tslint5+

react-router5+

react-redux7+

axios0.19+

element-ui1.4+

SCSS4.13+


環(huán)境版本要求:

Node >= 8.10

npm >= 5.6


首先安裝 React 框架和類型庫桑寨,有兩種方式:

方法1:

npx create-react-app my-app --typescript

方法2:

npx create-react-app my-app --scripts-version=react-scripts-ts

注意:npx 不是拼寫錯(cuò)誤 —— 它是 npm 5.2+ 附帶的 package 運(yùn)行工具。

Create React App它會(huì)自動(dòng)配置React的開發(fā)環(huán)境忿檩,my-app 是你要?jiǎng)?chuàng)建項(xiàng)目的名稱尉尾。

--scripts-version=react-scripts-ts是react官方腳手架不支持創(chuàng)建ts項(xiàng)目的時(shí)候,社區(qū)弄出來的一個(gè)解決方案燥透。

--typescript是現(xiàn)在官方腳手架支持的沙咏,可以理解成官方支持版本就對(duì)了辨图,這兩個(gè)對(duì)我們用戶來說是沒有什么能感知的區(qū)別,但一般還是建議盡量使用官方版本芭碍。

經(jīng)過一段時(shí)間的等待,React已經(jīng)成功安裝完成孽尽。

cd my-app

npm start

即可運(yùn)行預(yù)覽窖壕!

當(dāng)前的項(xiàng)目是可以運(yùn)行,但是呢杉女,對(duì)照一下我們上面的規(guī)劃瞻讽,還差一些插件。那接下就一步步給安裝上熏挎。

首先是tslint

npm i tslint

如果遇到npm一直卡住不會(huì)動(dòng)的情況速勇,可以將npm映射改為淘寶鏡像。

npm install -g cnpm --registry=https://registry.npm.taobao.org

映射過程中如果遇到Windows_NT 10.0.14393報(bào)錯(cuò)坎拐,可能是npm被設(shè)置代理了烦磁。順序執(zhí)行一下清除代理設(shè)置:

npm config set proxy null(npm config delete proxy)

npm config set https-proxy null

npm config set strict-ssl false

映射成功后,命令行執(zhí)行

cnpm i tslint

飛快的就安裝完成了哼勇。

安裝完成后輸入

tslint -i

運(yùn)行結(jié)束之后都伪,你會(huì)發(fā)現(xiàn)項(xiàng)目根目錄下多了一個(gè) tslint.json 文件,這個(gè)就是TSLint的配置文件了积担,它會(huì)根據(jù)這個(gè)

文件對(duì)我們的代碼進(jìn)行檢查陨晶,生成的tslint.json文件有下面幾個(gè)字段:

{

? ? "defaultSeverity": "error",

? ? "extends": [

? ? ? ? "tslint:recommended"

? ? ],

? ? "jsRules": {},

? ? "rules": {},

? ? "rulesDirectory": []

}

以上就是我們初始化的時(shí)候TSLint生成的tslint.json文件初始字段,如果你發(fā)現(xiàn)你生成的文件和這里看到的不一樣帝璧。

可能是TSLint版本升級(jí)導(dǎo)致的先誉,你可以參照TSLint配置說明了解他們的用途。

defaultSeverity是提醒級(jí)別的烁,如果為error則會(huì)報(bào)錯(cuò)褐耳,如果為warning則會(huì)警告,如果設(shè)為off則關(guān)閉渴庆,那TSLint就關(guān)閉了漱病。

extends可指定繼承指定的預(yù)設(shè)配置規(guī)則。

rulesDirectory可以指定規(guī)則配置文件把曼,這里指定相對(duì)路徑杨帽。

jsRules用來配置對(duì) .js 和 .jsx 文件的校驗(yàn),配置規(guī)則的方法和下面的rules一樣嗤军;

rules是重點(diǎn)了注盈,我們要讓TSLint根據(jù)怎樣的規(guī)則來檢查代碼,都是在這個(gè)里面配置 叙赚,我的項(xiàng)目需要配置幾個(gè)重點(diǎn)配置老客。

"no-trailing-whitespace": false,//尾部空格檢測

這個(gè)一定要選擇false僚饭,要不然每行代碼后面都不能有空格,包括換行以后產(chǎn)生的空格胧砰。

"one-line": [

? true,

? "check-open-brace",

? "check-catch",

? "check-else",

? "check-whitespace"

],//行內(nèi)檢測

這個(gè)里面可以自行配置自身需要的鳍鸵,比如check-whitespace這項(xiàng)就會(huì)要求函數(shù)名,參數(shù)表和函數(shù)段開頭的大括號(hào)之間要有空格尉间。當(dāng)然也可以設(shè)置為false偿乖,將這個(gè)功能完全禁用。

"no-console": false, //關(guān)閉不允許打印

"no-debugger": false,//關(guān)閉不允許debugger

這兩項(xiàng)都是打開后不便于調(diào)試哲嘲。

"comment-format": [

? ? ? true,

? ? ? "check-space"

],//注釋行中的空格

如果check-space這一項(xiàng)存在贪薪,那么注釋行的開頭必須要加上一個(gè)空格。這個(gè)對(duì)于使用英文注釋的人來說眠副,沒有多大影響河绽,但是中文話就沒有必要霜旧。注釋畢竟是區(qū)別于代碼段的试吁,要使用如何的書寫格式應(yīng)當(dāng)自己來決定萍倡。去掉這一項(xiàng),或者將整個(gè)commet-format的值改為false娃弓,就可以將其禁用庞萍。

"ordered-imports": false,//關(guān)閉import名稱排序

打開的話會(huì)要求import名稱按照字母從小到大排序,對(duì)于強(qiáng)迫癥是福音忘闻。但可惜我沒有強(qiáng)迫癥钝计。。

我們暫時(shí)需要的規(guī)則已經(jīng)配置完齐佳,還有其他需要在開發(fā)過程中不斷的補(bǔ)充私恬。如果你想要查看某條規(guī)則的配置及詳情,可以參照TSLint規(guī)則說明炼吴。

下面繼續(xù)安裝

axios:

npm i axios

redux:

npm i redux

npm i redux-devtools

SCSS:

npm i sass-loader node-sass --save-dev

element:

npm i element-react

npm i element-theme-default

使用npm安裝element-react容易出現(xiàn)卡在那里不會(huì)動(dòng)本鸣,建議使用cnpm安裝。

React首次運(yùn)行element硅蹦,常會(huì)出現(xiàn) Can't resolve 'react-hot-loader'錯(cuò)誤荣德,這種情況請(qǐng)安裝react-hot-loader最新版本

npm install react-hot-loader@next

PS:這里可能會(huì)有疑問,為什么不安裝webpack呢童芹?因?yàn)镃reate React App手腳架涮瞻,它與其他腳手架不同的一個(gè)地方就是將一些復(fù)雜工具(比如 webpack)的配置封裝了起來,讓使用者不用關(guān)心這些工具的具體配置假褪,從而降低了工具的使用難度署咽。

但是對(duì)于一些熟悉 webpack 的開發(fā)者來說,他們可能想對(duì) webpack 配置做一些修改,這個(gè)時(shí)候應(yīng)該怎么辦呢宁否?

其實(shí)可以通過 項(xiàng)目 eject的方式來修改 webpack 的配置窒升。

使用Create React App創(chuàng)建完項(xiàng)目以后,項(xiàng)目在package.json里面提供了這樣一個(gè)命令:

{

? ? ...

? ? "scripts": {

? ? "eject": "react-scripts eject"

? ? },

? ? ...

}

npm run eject執(zhí)行這條命令后會(huì)將封裝在Create React App項(xiàng)目中的配置全部反編譯到當(dāng)前項(xiàng)目慕匠,這樣用戶就可以完全取得 webpack 文件的控制權(quán)饱须,想怎么修改就怎么修改了。

# eject 后項(xiàng)目根目錄下會(huì)出現(xiàn) config 文件夾台谊,里面就包含了 webpack 配置

config

├── env.js

├── jest

│? ├── cssTransform.js

│? └── fileTransform.js

├── paths.js

├── polyfills.js

├── webpack.config.dev.js // 開發(fā)環(huán)境配置

├── webpack.config.prod.js // 生產(chǎn)環(huán)境配置

└── webpackDevServer.config.js

Create React App與其他腳手架不同的另一個(gè)地方蓉媳,就是可以通過升級(jí)其中的react-scripts包來升級(jí) CRA 的特性。比如用老版本 Create React App創(chuàng)建了一個(gè)項(xiàng)目青伤,這個(gè)項(xiàng)目不具備 PWA 功能督怜,但只要項(xiàng)目升級(jí)了react-scripts包的版本就可以具備PWA的功能殴瘦,項(xiàng)目本身的代碼不需要做任何修改狠角。

但如果使用了eject命令,就再也享受不到 Create React App升級(jí)帶來的好處了蚪腋,因?yàn)閞eact-scripts已經(jīng)是以文件的形式存在于你的項(xiàng)目丰歌,而不是以包的形式,所以無法對(duì)其升級(jí)屉凯。

項(xiàng)目到這里基本的功能已經(jīng)具備了立帖,接下來還需要一些單獨(dú)的配以及封裝調(diào)用,放到下一篇文章里寫吧悠砚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末晓勇,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子灌旧,更是在濱河造成了極大的恐慌绑咱,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件枢泰,死亡現(xiàn)場離奇詭異描融,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)衡蚂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門窿克,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人毛甲,你說我怎么就攤上這事年叮。” “怎么了玻募?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵谋右,是天一觀的道長。 經(jīng)常有香客問我补箍,道長改执,這世上最難降的妖魔是什么啸蜜? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮辈挂,結(jié)果婚禮上衬横,老公的妹妹穿的比我還像新娘。我一直安慰自己终蒂,他們只是感情好蜂林,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拇泣,像睡著了一般噪叙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霉翔,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天睁蕾,我揣著相機(jī)與錄音,去河邊找鬼债朵。 笑死子眶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的序芦。 我是一名探鬼主播臭杰,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谚中!你這毒婦竟也來了渴杆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤宪塔,失蹤者是張志新(化名)和其女友劉穎磁奖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝌麸,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡点寥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了来吩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敢辩。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖弟疆,靈堂內(nèi)的尸體忽然破棺而出戚长,到底是詐尸還是另有隱情,我是刑警寧澤怠苔,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布同廉,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏迫肖。R本人自食惡果不足惜锅劝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蟆湖。 院中可真熱鬧故爵,春花似錦、人聲如沸隅津。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伦仍。三九已至结窘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間充蓝,已是汗流浹背隧枫。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棺克,地道東北人悠垛。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓线定,卻偏偏與公主長得像娜谊,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斤讥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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