我想编写一些将在npm postinstall上执行的代码,只有在程序包全局安装时才会执行。是否有内置解决方案来检测活动软件包是否安装在全球?如何检测当前npm包是否全局?
如果不是那么什么是最好的解决方法,可以在任何操作系统上工作?我目前唯一的想法是检查包的当前工作目录,并检查它是否在全局npm路径下。
我想编写一些将在npm postinstall上执行的代码,只有在程序包全局安装时才会执行。是否有内置解决方案来检测活动软件包是否安装在全球?如何检测当前npm包是否全局?
如果不是那么什么是最好的解决方法,可以在任何操作系统上工作?我目前唯一的想法是检查包的当前工作目录,并检查它是否在全局npm路径下。
我发现,我在这个repo寻找解决方案。
解决的办法是在postinstall脚本中检查!!process.env.npm_config_global
。只有在软件包全局安装的情况下,该环境变量才会成立。
至少在NPM 3中,这个env变量没有设置。 –
您可以使用require.resolve()
为您提供路径。你可以比较给定的路径,看它是安装在本地还是全局。您可以使用npm root -g
来获取全局模块的路径。
你会比较什么?例如,如果您使用[nvm](https://github.com/creationix/nvm)之类的东西,则全局模块位置与正常不同。 – Chev
我现在有另一个想法。我正在考虑是否可以以某种方式获取安装包时使用的参数。在这种情况下,我可以检查是否有-g选项 –
'npm root -g'会给你全局模块位置 –
http://stackoverflow.com/questions/26104276/how-to-tell-if-npm-package-was-installed-globally-or-locally – danronmoon
是的,也许我可以调用'npm list -g'命令编程并检查我的软件包是否在列表中。虽然我更喜欢不同的解决方案 –