[英]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.