2015-06-25 21 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'会给你全局模块位置 –

相关问题