簡體   English   中英

npm 安裝的工作原理

[英]How npm install works

我將 Node.js(通過browserify )用於我的每個 Web 應用程序,所有這些應用程序都有一些共同的依賴項和其他特定於自己的依賴項。 這些應用程序中的每一個都有一個package.json文件,用於指定它需要哪些模塊的哪些版本。

現在,我的應用程序的父文件夾中有一個/node_modules目錄,用於它們都需要引用的模塊,然后我將特定於應用程序的模塊放在該應用程序目錄的node_modules文件夾中。 這在短期內工作正常,因為我的require()語句能夠在文件結構中繼續向上查找,直到它們找到包含正確應用程序的node_modules目錄。

當我想回到一個舊項目並運行npm install以確保它仍然可以找到它需要的所有依賴項時,這變得棘手。 (誰知道從那以后在父目錄級別發生了什么有趣的事情。)我的印象是npm install這樣做了:

  • 對於package.json列出的每個模塊,首先檢查它是否存在,以與require相同的方式向上移動目錄 如果不是,請將其安裝到本地node_modules目錄(如有必要,請創建該目錄)。

但是,當我在 app 文件夾中運行npm install時,它似乎會在本地安裝所有內容,而不管上游可能存在於何處。 這是正確的行為嗎? (可能還有另一個原因,比如我的package.json版本語言不好)。 如果這是正確的行為,有沒有辦法讓npm install表現得像上面一樣?

在每個應用程序中廣泛復制模塊並不是什么大不了的事,但感覺很混亂,並阻止我對通用模塊進行小的改進,而不必更新每個舊的package.json文件。 當然,這可能是一件好事......

但是,當我在 app 文件夾中運行 npm install 時,它似乎會在本地安裝所有內容,而不管上游可能存在於何處。 這是正確的行為嗎? (可能還有另一個原因,比如我的 package.json 中的版本語言不好)。 如果這是正確的行為,有沒有辦法讓 npm install 表現得像上面一樣?

是的,這就是 npm install 所做的。 在 node.js 代碼中, require算法有一個特定的位置序列,包括遍歷文件系統。 但是, npm install不會這樣做。 它只是安裝到位。 它使用的算法都僅限於您當前目錄下的單個node_modules目錄,並且不會觸及任何高於該目錄的內容(使用-g除外)。

在每個應用程序中廣泛復制模塊並不是什么大不了的事,但感覺很混亂,並阻止我對通用模塊進行小的改進,而不必更新每個舊的 package.json 文件。 當然,這可能是一件好事......

是的,基本上你做錯了。 常規工作流可以很好地擴展到 Internet。 對於您的用例,它會創建一些額外繁瑣的工作,但您也可以按預期使用語義版本控制並在 package.json 中為您的應用程序指定"mylib": "^1.0.0"並且接下來自動獲取更新版本就OK了當你npm install

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM