2015-06-25 17 views
4

我想編寫一些將在npm postinstall上執行的代碼,只有在程序包全局安裝時纔會執行。是否有內置解決方案來檢測活動軟件包是否安裝在全球?如何檢測當前npm包是否全局?

如果不是那麼什麼是最好的解決方法,可以在任何操作系統上工作?我目前唯一的想法是檢查包的當前工作目錄,並檢查它是否在全局npm路徑下。

+0

http://stackoverflow.com/questions/26104276/how-to-tell-if-npm-package-was-installed-globally-or-locally – danronmoon

+0

是的,也許我可以調用'npm list -g'命令編程並檢查我的軟件包是否在列表中。雖然我更喜歡不同的解決方案 –

回答

4

我發現,我在這個repo尋找解決方案。

解決的辦法是在postinstall腳本中檢查!!process.env.npm_config_global。只有在軟件包全局安裝的情況下,該環境變量纔會成立。

+1

至少在NPM 3中,這個env變量沒有設置。 –

0

您可以使用require.resolve()爲您提供路徑。你可以比較給定的路徑,看它是安裝在本地還是全局。您可以使用npm root -g來獲取全局模塊的路徑。

https://nodejs.org/api/globals.html#globals_require_resolve

+2

你會比較什麼?例如,如果您使用[nvm](https://github.com/creationix/nvm)之類的東西,則全局模塊位置與正常不同。 – Chev

+0

我現在有另一個想法。我正在考慮是否可以以某種方式獲取安裝包時使用的參數。在這種情況下,我可以檢查是否有-g選項 –

+1

'npm root -g'會給你全局模塊位置 –

相關問題