輸入npm install 之後都幹了啥

2021-09-27 06:37:05 字數 2314 閱讀 5074

npm是node的模組管理工具

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

npm install
1、 從npm install說起

npm install 命令用來安裝模組到node_module目錄中

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

如果你希望,乙個模組不管是否安裝過都重新新安裝一遍,可以用-f 或者—force引數

npm install --force
2、 更新現有模組

如果想更新已安裝的模組,可以使用npm-update命令,會先遠端倉庫更新到最新版本,如果本地版本不存在,或者遠端倉庫已經有最新版本就會安裝。

npm update
3、模組的安裝程序

發出npm install命令

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

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

執行npm install之後的細節

1、 執行工程自身的preinstall

當前鉤子如果定義了preinstall會被執行

2、 定義首層依賴模組

首先需要做的就是工程中的首層依賴,也就是dependencies和devdependencies屬性中直接指定的模組。

工程本身是整顆依賴樹的根節點,每個首層依賴模組都是根節點下面的一顆子樹,npm會開啟多程序從每個首層依賴模組開始逐步尋找更深層級的節點。

獲取模組

獲取模組是乙個遞迴的過程,分為以下幾步:

查詢該模組依賴,如果有依賴則回到第1步,如果沒有則停止。

4、模組扁平化(dedupe)

上一步獲取到的是一棵完整的依賴樹,其中可能包含大量重複模組。比如 a 模組依賴於 loadsh,b 模組同樣依賴於 lodash。在 npm3 以前會嚴格按照依賴樹的結構進行安裝,因此會造成模組冗餘。

從 npm3 開始預設加入了乙個 dedupe 的過程。它會遍歷所有節點,逐個將模組放在根節點下面,也就是 node-modules 的第一層。當發現有重複模組時,則將其丟棄。

這裡需要對重複模組進行乙個定義,它指的是模組名相同且 semver 相容。每個 semver 都對應一段版本允許範圍,如果兩個模組的版本允許範圍存在交集,那麼就可以得到乙個相容版本,而不必版本號完全一致,這可以使更多冗餘模組在 dedupe 過程中被去掉。

比如 node-modules 下 foo 模組依賴 lodash@^1.0.0,bar 模組依賴 lodash@^1.1.0,則 ^1.1.0 為相容版本。

而當 foo 依賴 lodash@^2.0.0,bar 依賴 lodash@^1.1.0,則依據 semver 的規則,二者不存在相容版本。會將乙個版本放在 node_modules 中,另乙個仍保留在依賴樹里。

舉個例子,假設乙個依賴樹原本是這樣:

node_modules

– foo

---- lodash@version1

– bar

---- lodash@version2

假設 version1 和 version2 是相容版本,則經過 dedupe 會成為下面的形式:

node_modules

– foo

– bar

– lodash(保留的版本為相容版本)

假設 version1 和 version2 為非相容版本,則後面的版本保留在依賴樹中:

node_modules

– foo

– lodash@version1

– bar

---- lodash@version2

5、安裝模組

這一步將會更新工程中的 node_modules,並執行模組中的生命週期函式(按照 preinstall、install、postinstall 的順序)。

6、執行工程自身生命週期

當前 npm 工程如果定義了鉤子此時會被執行(按照 install、postinstall、prepublish、prepare 的順序)。

7、更新版本

最後一步是生成或更新版本描述檔案,npm install 過程完成。

參考文件:

輸入 npm install 報錯

錯誤資訊如下 npm warn deprecated browserslist 2.11.3 browserslist 2 could fail on reading browserslist 3.0 config used in other tools.npm err unexpected end...

npm install 安裝之後提示找不到相應命令

npm install dva cli g安裝dva cli,安裝完成後使用dva v,提示未找到命令。先開啟home資料夾 cd home然後建立乙個全域性安裝的資料夾 mkdir npm global配置npm使用此目錄為路徑 npm config set prefix npm global 用...

git pull push每次都需要輸入密碼問題

進入你的專案目錄 輸入命令 git config global credential.helper store 會在你本地生成乙個文字,用於記錄你的賬號和密碼 然後你再操作一次git pull,會提示你輸入賬號密碼,這一次之後就不需要再次輸入密碼了。全域性配置的話是在 目錄下生成了.git cred...