在Ubuntu中,我有我的代碼目錄/code其中有我packages.json和這樣的。我的 NPM 前綴是/usr通過npm prefix -g. 我正在嘗試全域安裝軟體包,以免在 中創建node_modules目錄/code,但實際上只要node_modules不在 中/code,這也將起作用。
在/code,我跑npm install -g。我看到.staging在我的全域前綴(例如,/usr/lib/node_modules/.staging)下創建了一個/code/node_modules目錄,但隨后 NPM 采取了另一個步驟并開始創建一個目錄。
如果我只是npm install -g <package>正確運行它,則會以/usr/lib/node_modules/<package>. 但我不想為npm install -g <package>我需要的每個包都運行。
為什么 NPM 這樣做,我怎樣才能讓它停止這樣做?至少,我希望node_modules目錄/code不在我的目錄中(這是由于我無法更改的某些環境限制)。
uj5u.com熱心網友回復:
全域安裝的軟體包(幾乎總是)不會被您的代碼使用。這不是node或npm(傳統上)的作業方式。沒有一個共享的全域變數可以node_modules讓程式全部查看。(好吧,有一點,但如果你能避免它,你就不想使用它。繼續閱讀。)擁有一個區域node_modules變數可以幫助你避免依賴地獄。全域模塊用于 CLI 工具,這些工具最終會出現在你的PATH和類似的東西中。
你沒有解釋為什么你node_modules的專案不想要一個本地人,所以我會提到,如果這只是因為它以某種方式打擾了你,那么請不要忘記它。你會快樂很多。鍵入npm install并繼續。
這就是說,由于遺留原因,你的代碼/code將查找/node_modules,如果沒有/code/node_modules。對于使用require(). 如果您通過 使用 ESM 模塊import,您可能需要閱讀檔案。
所以,如果你使用的是 CommonJS/ require(),你可以有一個像/project-name/code. 您可以index.js在code子目錄中包含您的或任何其他代碼,而您package.json可以在project-name. 運行npm installfrom/project-name它將node_modules在那里而不是在code子目錄中創建一個目錄,并且您的 Node.js 檔案code將找到這些模塊。
如果您不喜歡那樣,那么對于其他選項,您可以查看相關檔案。在撰寫本文時,這些選項包括NODE_PATH環境變數$HOME/.node_modules、$HOME/.node_libraries、 和$PREFIX/lib/node。然而,這一切都伴隨著這個警告,我懇請您盡可能遵守:
強烈建議將依賴項放在本地 node_modules 檔案夾中。這些將加載得更快,更可靠。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/354111.html
