[英]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
現在實際上不會為全局安裝的模塊提取任何內容 (不顯示網絡活動)。
我的問題:
npm install
期間拍攝的全局模塊的快照(副本)嗎? 這是我對此的個人看法,這與node.js常見做法明顯不同,但我認為這是一種整體優越的方法。 它在我自己的博客文章中有詳細說明(關於自我推銷的免責聲明,yada yada) 管理每個項目的口譯員和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.