npm是node的模塊管理器,功能及其強大,它是node獲得成功的重要原因之一。
正因為有了nom,我們只要一行命令,就能安裝別人寫好的模塊。
$ npm install
本文介紹npm模塊安裝機制的細節,以及如何解決安裝速度慢的問題
一。從npm install說起
npm install 命令用來安裝模塊到node_modules目錄;
$ npm install <packageName>
安裝之前,npm install 會先檢查,node_modules中是否已經存在指定模塊,如果存在,就不重新安裝了,即使遠程倉庫已經有了一個新版本,也是如此。
如果你希望,一個模塊不管是否安裝過,npm都要強制重新安裝,可以用 -f 或 -force 參數
$ npm install <packageName> --force
二。npm update
如果想更新已安裝模塊,就要用到 npm update 命令
$ npm update <packageName>
它會先到遠程倉庫查詢最新版本,然后查詢本地版本,如果本地版本不存在,或者遠程版本較新,就會安裝。
三。registry
npm update 命令是怎么知道每個模塊的最新版本呢?
答案是npm模塊倉庫提供了一個查詢服務,叫做regisrty,以 npmjs.org 為例,它的查詢服務網址是 https://registry.npmjs.org/
。
這個網址后面跟上模塊名,就會得到一個JSON對象,里面是該模塊所有版本信息,比如,訪問https://registry.npmjs.org/react,就會看到 react 模塊所有版本的信息。
它跟下面命令的效果是一樣的。
$ npm view react
# npm view 的別名
$ npm info react
$ npm show react
$ npm v react
registry 網址的模塊名后面,還可以跟上版本號或標簽,用來查詢某個具體版本的信息,比如,訪問 https://registry.npmjs.org/react/v0.14.6 ,就可以看到 react 的0.14.6版本
返回的JSON對象里面,有一個dist.tarball屬性,是該版本壓縮包的網址
dist: { shasum: '2a57c2cf8747b483759ad8de0fa47fb0c5cf5c6a', tarball: 'http://registry.npmjs.org/react/-/react-0.14.6.tgz' },
到這個網址下載壓縮包,在本地解壓,就得到了模塊的源碼,npm install
和npm update
命令,都是通過這種方式安裝模塊的。
四,緩存目錄
npm install 或 npm update 命令,從 registry 下載壓縮包之后,都存放在本地的緩存目錄
這個緩存目錄,在Linux或Mac默認是用戶主目錄下的.npm
目錄,在 Windows 默認是%AppData%/npm-cache
。通過配置命令,可以查看這個目錄的具體位置。
$ npm config get cache
$HOME/.npm