簡體   English   中英

Node / npm:如何管理全局安裝的devDependencies

[英]Node / npm: How to manage globally installed devDependencies

我正在構建一個帶有devDependencies的Node模塊,應該全局安裝,例如jasmine-node和jshint。 我基本上需要的是能夠在我的makefile / npm腳本部分中引用它們的二進制文件來運行測試,lint等。換句話說,我不希望以編程方式要求它們。

在挖掘之后,我仍然對如何處理這個問題感到困惑:

1)我的第一種方法是假設這些模塊將全局安裝,在我的模塊文檔中澄清這一點,並將它們的二進制文件作為全局變量引用 - 即期望它們全局可用。 這與這條建議相沖突

確保避免引用全局安裝的二進制文件。 而是將其指向本地node_modules,它將二進制文件安裝在隱藏的.bin目錄中。 確保模塊(在本例中為“mocha”)位於devDependencies下的package.json中,以便在運行npm install時將二進制文件放在那里。

(摘自這篇文章

這通常聽起來是正確的,因為上述設置相當脆弱。

2)我的下一個方法明確地將這些模塊包含在devDependencies中(盡管它們仍然全局安裝在我的系統上(並且很可能也在用戶和貢獻者的系統上))。 這確保了在需要時存在適當版本的二進制文件,現在我可以通過node_modules/.bin/引用它們。

但是我現在與這條建議發生沖突

如果你想要()它在本地安裝它。

(摘自npm docs

無論如何,我注意到npm install現在實際上不會為全局安裝的模塊提取任何內容 (不顯示網絡活動)。


我的問題:

  • 全局安裝的模塊的本地版本(在devDependencies中提到)是在npm install期間拍攝的全局模塊的快照(副本)嗎?
  • 2)正確的方法是這樣做嗎? 還是有其他一些我不知道的做法?

這是我對此的個人看法,這與node.js常見做法明顯不同,但我認為這是一種整體優越的方法。 它在我自己的博客文章中有詳細說明(關於自我推銷的免責聲明,yada yada) 管理每個項目的口譯員和PATH

它基本歸結為:

  1. 永遠不要使用npm -g。 切勿安裝全局模塊。
  2. 相反,請調整PATH以包含projectDir/node_modules/.bin

在我最初寫完這些問題幾年之后重新審視自己的問題,我覺得我現在可以放心地說出引用的“建議”

如果你想要()它在本地安裝它。

不再忍受了。 (它 npm文檔的一部分,但是在撰寫本文時,已發布的2年鏈接給了我404。)

如今, npm run是執行任務管理/自動化的好方法,它會在執行前自動將本地安裝的模塊導出到路徑中。 因此,在本地安裝require()d模塊require()d例如短接和測試運行器require()d是非常有意義的。 (順便說一下,這完全符合Peter Lyons幾年前提供的答案 - 當時可能已經'明確地與node.js常見做法不同',但它今天被廣泛接受:))

至於我的第二個問題

全局安裝的模塊的本地版本(在devDependencies中提到)是在npm安裝期間拍攝的全局模塊的快照(副本)嗎?

我非常有信心答案是否定的(也許我當時觀察到的網絡活動缺乏,在安裝全局安裝的本地模塊期間是由於緩存......?)


請注意,2016年11月12日

原始問題所鏈接的相關npm文檔已移至此處

暫無
暫無

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

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