在前端項目構(gòu)建的過程中,npm
筐喳、yarn
應(yīng)該是當(dāng)前使用得最頻繁的包管理工具了催式,他們幫助我們解決了復(fù)雜的依賴關(guān)系。在使用 npm
下載包時疏唾,由于是從國外的 NPM 服務(wù)器上下載蓄氧,導(dǎo)致有時安裝第三方包到本地時很慢函似,很蛋疼吧槐脏。
于是就有了 cnpm
,這是淘寶團(tuán)隊做的淘寶 NPM 鏡像撇寞。你可以放心地用 cnpm
來代替 npm
顿天,因為它同步頻率為 10 分鐘一次,以保證盡量與官方服務(wù)同步蔑担。
如果需要馬上更新牌废,cnpm
提供了一個特有命令 cnpm sync <pkg-name>
來同步某個模塊。
「重要通知」原淘寶 npm 域名即將停止解析啤握,請切換至新域名 npmmirror.com鸟缕,
http://npm.taobao.org
和http://registry.npm.taobao.org
將在 2022.06.30 號正式下線和停止 DNS 解析。
相關(guān)域名切換參考如下:
http://npm.taobao.org => https://npmmirror.com
http://registry.npm.taobao.org => https://registry.npmmirror.com
一排抬、使用 cnpm(不推薦)
使用 cnpm
命令替代 npm
懂从,安裝非常地簡單。
它支持 npm 除了
npm publish
之外的所有命令蹲蒲。
- 安裝
$ npm i -g cnpm --registry=https://registry.npmmirror.com/
- 測試是否成功安裝
$ cnpm -v
- 安裝模塊
$ cnpm install [name]
二番甩、替換 npm 鏡像源
盡管我們安裝并使用 cnpm
,但是有一些命令(如 create-react-app
等)它們內(nèi)部還是使用了 npm
命令届搁,仍是訪問國外的鏡像源缘薛,所以還是會慢。
首先卡睦,通過以下命令可以查看或設(shè)置 npm
的源地址:
# 查看 registry
$ npm config get registry
# 設(shè)置 registry
$ npm config set registry <registry-url>
下面我們將其修改為淘寶鏡像源:
$ npm config set registry https://registry.npmmirror.com/
也可以直接在配置文件 ~/.npmrc
中添加一行配置并保存:
registry=https://registry.npm.taobao.org/
三宴胧、安裝依賴包時,直接指定鏡像源
這種方式太麻煩了表锻,每次都要加上鏡像源地址牺汤。
$ npm i <pkg-name> --registry=https://registry.npmmirror.com
四、為什么不推薦 cnpm 呢浩嫌?
首先檐迟,使用 npm
作為前端項目包管理工具的話补胚,使用 npm
和 cnpm
來安裝包時有區(qū)別的。通常我們前端項目中都會有 package-lock.json
文件(其作用可看文章)追迟,這兩個命令對其有一定的影響:
cnpm i
不受package-lock.json
影響溶其,只會根據(jù)package.json
進(jìn)行下載安裝。cnpm i xxx@xxx
不會跟新到package-lock.json
中去敦间。npm i xxx@xxx
會跟新到package-lock.json
中去瓶逃。在多人共同協(xié)作維護(hù)的項目中,
package-lock.json
是必不可少的廓块,是為了確保不同開發(fā)者安裝的包及其依賴保持一致厢绝,同時也是降低不同版本 npm 包給項目穩(wěn)定性帶來的影響。尤其是一些不遵循語義化版本控制的第三方 npm 包带猴,就很容易被坑到昔汉。
五、用更好的方式嗎拴清?
通常靶病,個人在項目中使用得更多的是 yarn。管理鏡像源推薦使用 nrm
或 yrm
口予,可以快速切換鏡像源娄周。前者僅會修改 npm
鏡像源,后者會同時修改 npm
和 yarn
鏡像源沪停。
關(guān)于一些全局依賴包木张,個人使用習(xí)慣是:與 Node 版本有關(guān)的使用 npm
安裝(比如 Taro CLI 等)并配合 nvm
工具進(jìn)行管理众辨,其他的一般使用 yarn
進(jìn)行安裝。
管理 Node 版本推薦使用 nvm 工具窟哺,但請注意泻轰,如果使用了 nvm
建議移除 ~/.npmrc
中的 prefix
配置項(如果有的話),否則全局包可能會安裝到同一目錄下且轨,而不會隨著 Node 的切換而變化(原因看這里)浮声。
The end.