NPM功能介紹

2021-07-31 18:09:05 字數 4099 閱讀 5500

npm 是 node 的模組管理器,功能極其強大。它是 node 獲得成功的重要原因之一。

正因為有了npm,我們只要一行命令,就能安裝別人寫好的模組 。

$ npm install 

本文介紹 npm 模組安裝機制的細節,以及如何解決安裝速度慢的問題。

npm install

命令用來安裝模組到node_modules目錄。

$ npm install 

安裝之前,npm install會先檢查,node_modules目錄之中是否已經存在指定模組。如果存在,就不再重新安裝了,即使遠端倉庫已經有了乙個新版本,也是如此。

如果你希望,乙個模組不管是否安裝過,npm 都要強制重新安裝,可以使用-f或--force引數。

$ npm install 

--force

如果想更新已安裝模組,就要用到npm update

命令。

$ npm update 

它會先到遠端倉庫查詢最新版本,然後查詢本地版本。如果本地版本不存在,或者遠端版本較新,就會安裝。

npm update命令怎麼知道每個模組的最新版本呢?

答案是 npm 模組倉庫提供了乙個查詢服務,叫做 registry 。以 npmjs.org 為例,它的查詢服務**是 

。這個**後面跟上模組名,就會得到乙個 json 物件,裡面是該模組所有版本的資訊。比如,訪問 react

,就會看到 react 模組所有版本的資訊。

它跟下面命令的效果是一樣的。

$ npm view react

# npm view 的別名

$ npm info react

$ npm show react

$ npm v react

registry **的模組名後面,還可以跟上版本號或者標籤,用來查詢某個具體版本的資訊。比如, 訪問 react/v0.14.6 ,就可以看到 react 的 0.14.6 版。

返回的 json 物件裡面,有乙個dist.tarball屬性,是該版本壓縮包的**。

dist

:,

$ npm config get cache

$home

/.npm

你最好瀏覽一下這個目錄。

$ ls ~/

.npm

# 或者

$ npm cache ls

你會看到裡面存放著大量的模組,儲存結構是//。

$ npm cache ls react~/

.npm/react/react/

0.14.6

/~/.npm/react/react/

0.14.6

/package.tgz~/

.npm/react/react/

0.14.6

/package/~/

.npm/react/react/

0.14.6

/package/package.json

每個模組的每個版本,都有乙個自己的子目錄,裡面是**的壓縮包package.tgz檔案,以及乙個描述檔案package/package.json。

這個檔案儲存的是,所有版本的資訊,以及該模組最近修改的時間和最新一次請求時伺服器返回的 etag 。

,"_etag"

:"\"7s37i0775ylurcfio8n85fo0f\""

}

對於一些不是很關鍵的操作(比如npm search或npm view),npm會先檢視.cache.json裡面的模組最近更新時間,跟當前時間的差距,是不是在可接受的範圍之內。如果是的,就不再向遠端倉庫發出請求,而是直接返回.cache.json的資料。

.npm目錄儲存著大量檔案,清空它的命令如下。

$ rm 

-rf ~

/.npm/

*# 或者

$ npm cache clean

總結一下,node模組的安裝過程是這樣的。

發出npm install命令

npm 向 registry 查詢模組壓縮包的**

解壓壓縮包到當前專案的node_modules目錄

注意,乙個模組安裝以後,本地其實儲存了兩份。乙份是~/.npm目錄下的壓縮包,另乙份是node_modules目錄下解壓後的**。

另外,有些場合沒有網路(比如飛機上),但是你想安裝的模組,明明就在快取目錄之中,這時也無法安裝。

為了解決這些問題,npm 提供了乙個--cache-min引數,用於從快取目錄安裝模組。

$ npm install 

--cache-min 9999999

它還有另一種寫法。

$ npm install 

--cache-min infinity

但是,這並不等於離線模式,這時仍然需要網路連線。因為現在的--cache-min實現有一些問題。

npm 團隊知道存在這些問題,正在重寫 cache。並且,將來會提供乙個--offline引數,使得 npm 可以在離線情況下使用。

不過,這些改進沒有日程表。所以,當前使用--cache-min改進安裝速度,是有問題的。

社群已經為npm的離線使用,提出了幾種解決方案。它們可以大大加快模組安裝的速度。

解決方案大致分成三類。

第一類,registry **。

上面三個模組的用法很類似,都是在本機起乙個 registry 服務,所有npm install命令都要通過這個服務**。

有了本機的registry服務,就能完全實現快取安裝,可以實現離線使用。

第二類,npm install替代。

如果能夠改變npm install的行為,就能實現快取安裝。npm-cache

工具就是這個思路。凡是使用npm install的地方,都可以使用npm-cache替代。

$ npm

-cache install

第三類,node_modules作為快取目錄。

這個方案的思路是,不使用.npm快取,而是使用專案的node_modules目錄作為快取。

上面兩個工具,都能將專案的node_modules目錄打成乙個壓縮包,以後安裝的時候,就從這個壓縮包之中取出檔案。

NPM使用介紹

一 npm是隨同nodejs一起安裝的包管理工具,能夠解決nodejs 部署上的很多問題,常見的使用場景有以下幾種 3 允許使用者將自己編寫的包或命令列程式上傳到npm伺服器供別人使用。可以使用npm命令安裝node.js模組語法 如 npm install 在安裝好後可以直接在 中使用requir...

NPM使用介紹

重點 介紹 npm是隨同nodejs一起安裝的包管理工具,能解決nodejs 部署上的很多問題,常見的使用場景有以下幾種 由於新版的nodejs已經整合了npm,所以之前npm也一併安裝好了。同樣可以通過輸入 npm v 來測試是否成功安裝。命令如下,出現版本提示表示安裝成功 npm v 2.3.0...

NPM使用介紹

npm是隨同nodejs一起安裝的包管理工具,能解決nodejs 部署上的很多問題,常見的使用場景有以下幾種 允許使用者將自己編寫的包或命令列程式上傳到npm伺服器供別人使用。由於新版的nodejs已經整合了npm,所以之前npm也一併安裝好了。同樣可以通過輸入 npm v 來測試是否成功安裝。命令...