一撤蚊、npm和cnpm
區(qū)別
npm是node的包管理工具屡江,會(huì)把項(xiàng)目里所有的依賴項(xiàng)保存在package.json
文件中剪芍。
cnpm是淘寶在中國(guó)搭建的npm副本敢朱,保證中國(guó)用戶使用依賴不受網(wǎng)路的影響。
cnpm:優(yōu)點(diǎn)是速度快葵姥,缺點(diǎn)是沒(méi)辦法保證每個(gè)同事安裝依賴的時(shí)候版本一致荷鼠,就會(huì)出現(xiàn)依賴升級(jí)不兼容性問(wèn)題
npm:優(yōu)點(diǎn)是通過(guò)package-lock.json文件能夠鎖定版本,缺點(diǎn)是安裝速度慢榔幸。
切換
npm 切換 cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm 切換 npm
npm config set registry https://registry.npmjs.org
--save-dev和--save
--save-dev
的縮寫(xiě)是-D
允乐,開(kāi)發(fā)環(huán)境
--save
的縮寫(xiě)是-S
,生產(chǎn)環(huán)境
二削咆、package-lock.json和package.json
package.json
使用 npm init
命令自動(dòng)生成牍疏。
定義了這個(gè)項(xiàng)目所需要的各種模塊,以及項(xiàng)目的配置信息(比如名稱拨齐、版本鳞陨、許可證等元數(shù)據(jù))。
package.json文件只能鎖定主版本號(hào)
package-lock.json
package-lock.json它會(huì)在npm更改node_modules目錄樹(shù)或者package.json時(shí)自動(dòng)生成的瞻惋,它準(zhǔn)確的描述了當(dāng)前項(xiàng)目npm包的依賴樹(shù)厦滤,并且在隨后的安裝中會(huì)根據(jù)package-lock.json來(lái)安裝,保證是相同的一個(gè)依賴樹(shù)歼狼,不考慮這個(gè)過(guò)程中是否有某個(gè)依賴有小版本的更新掏导。
package-lock.json 是在 npm install
時(shí)候生成一份文件。
該文件里面記錄了package.json依賴的模塊羽峰,以及依賴的依賴趟咆。并且給每個(gè)依賴標(biāo)明了版本, 獲取地址和哈希值, 使得每次安裝都會(huì)出現(xiàn)相同的結(jié)果. 不管你在什么機(jī)器上面或什么時(shí)候安裝。
其實(shí)就是鎖定版本的意思梅屉,當(dāng)你需要的依賴被作者更新后值纱,并不會(huì)影響你項(xiàng)目依賴的安裝,依然是你最初安裝時(shí)鎖定的版本坯汤。保證你的項(xiàng)目不會(huì)因?yàn)橐蕾嚫露鲥e(cuò)虐唠。
當(dāng)我們下次再npm install時(shí)候,npm發(fā)現(xiàn)如果項(xiàng)目中有package-lock.json文件惰聂,會(huì)根據(jù)package-lock.json里的內(nèi)容來(lái)處理和安裝依賴而不再根據(jù)package.json.
cnpm不支持package-lock.json
1凿滤、使用cnpm install時(shí)候,并不會(huì)生成package-lock.json文件
2庶近、cnpm install的時(shí)候,就算你項(xiàng)目中有package-lock.json文件眷蚓,cnpm也不會(huì)識(shí)別鼻种,仍會(huì)根據(jù)package.json來(lái)安裝。所以這就是為什么之前你用npm 安裝產(chǎn)生了package-lock.json沙热,后面的人用cnpm來(lái)安裝叉钥,可能會(huì)跟你安裝的依賴包不一致罢缸,這是因?yàn)閏npm 不受package-lock.json影響,只會(huì)根據(jù)package.json進(jìn)行下載投队。
版本號(hào)
major.minor.patch (主版本號(hào).次版本號(hào).修訂號(hào))
patch:修復(fù)bug枫疆,兼容老版本
minor:新增功能,兼容老版本
major:新的架構(gòu)調(diào)整敷鸦,不兼容老版本
修復(fù)問(wèn)題但不影響API 時(shí)息楔,遞增修訂號(hào);
API 保持向下兼容的新增及修改時(shí)扒披,遞增次版本號(hào)值依;
進(jìn)行不向下兼容的修改時(shí),遞增主版本號(hào)碟案。
版本符號(hào)
version
必須匹配某個(gè)版本
如:1.1.2愿险,表示必須依賴1.1.2版
>version
必須大于某個(gè)版本
如:>1.1.2,表示必須大于1.1.2版
>=version
可大于或等于某個(gè)版本
如:>=1.1.2价说,表示可以等于1.1.2辆亏,也可以大于1.1.2版本
<version
必須小于某個(gè)版本
如:<1.1.2,表示必須小于1.1.2版本
<=version
可以小于或等于某個(gè)版本
如:<=1.1.2鳖目,表示可以等于1.1.2扮叨,也可以小于1.1.2版本
~version
大概匹配某個(gè)版本
如果minor版本號(hào)指定了,那么minor版本號(hào)不變疑苔,而patch版本號(hào)任意
如果minor和patch版本號(hào)未指定甫匹,那么minor和patch版本號(hào)任意
如:~1.1.2,表示>=1.1.2 <1.2.0惦费,可以是1.1.2兵迅,1.1.3,1.1.4薪贫,.....恍箭,1.1.n
如:~1.1,表示>=1.1.0 <1.2.0瞧省,可以是同上
如:~1扯夭,表示>=1.0.0 <2.0.0,可以是1.0.0鞍匾,.....交洗,1.0.n,1.1.n橡淑,.....构拳,1.n.n
^version
兼容某個(gè)版本
版本號(hào)中最左邊的非0數(shù)字的右側(cè)可以任意
如果缺少某個(gè)版本號(hào),則這個(gè)版本號(hào)的位置可以任意
如:^1.1.2 ,表示>=1.1.2 <2.0.0置森,可以是1.1.2斗埂,.....,1.1.n凫海,.....呛凶,1.n.n
如:^0.2.3 ,表示>=0.2.3 <0.3.0行贪,可以是0.2.3漾稀,0.2.4,.....瓮顽,0.2.n
如:^0.0县好,表示 >=0.0.0 <0.1.0,可以是0.0.0暖混,0.0.1缕贡,.....,0.0.n
x-range
x的位置表示任意版本
如:1.2.x拣播,表示可以1.2.0晾咪,1.2.1,.....贮配,1.2.n
*-range
任意版本谍倦,""也表示任意版本
如:*,表示>=0.0.0的任意版本
version1 - version2
大于等于version1泪勒,小于等于version2
如:1.1.2 - 1.3.1昼蛀,表示包括1.1.2和1.3.1以及他們件的任意版本
range1 || range2
滿足range1或者滿足range2,可以多個(gè)范圍
如:<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0圆存,表示滿足這3個(gè)范圍的版本都可以
latest
當(dāng)前發(fā)布版本叼旋。
默認(rèn)情況下 npm install 安裝的就是這個(gè) latest 標(biāo)記的版本
文檔
cnpm
npm中文
npm
版本號(hào)
package-lock.json