防止全球安装NPM包

时间:2016-10-16 07:55:04

标签: node.js npm

我有一个库,并希望鼓励/强制用户仅使用本地安装的版本。我可以通过艰难的方式或简单的方式来做到这一点。

如果NPM有一种机制可以防止对任何库使用带有npm install命令的--global开关,那么这将是一种简单的方法。

如果代码确定它是全局安装的,而不是在本地安装,那么很难在我的NPM打包中添加早期返回的代码。

是否有人知道您是否可以阻止全球安装NPM包?什么可能是最友好的方式来解决这个问题?

1 个答案:

答案 0 :(得分:3)

阻止用户全局安装模块的最佳方法是在文档中描述您的偏好。

如果可以在本地安装用户,则可以执行强制用户永远不要全局安装它。如果需要,他们将始终能够手动移动文件。

npm社区中,假设用户可以控制他/她使用的模块不是相反的。强迫人们以某种​​方式使用你的模块只会让他们不高兴。

对您的问题唯一的好答案是记录代码的使用方式。您可以要求他们以某种方式使用您的模块 - 但他们可以选择是否倾听您的意见。您可以声明使用全局安装的模块不受支持,不明智,不鼓励,危险,但您无法强制用户根据需要使用该模块,这是一件好事。

现在,对于一些错误答案,您始终可以测试模块根目录的父目录是否为node_modules,如果不是,则会失败,但我确定如果有人碰巧在您本地安装您的模块但在不同的目录下,它可能会导致一些麻烦。您可以查看模块是否从节点用于搜索模块的其中一个默认路径运行,但这些路径并不总是相同,并且您还必须考虑NODE_PATH环境变量。

你可以做一些这样的技巧,但他们只能惹恼那些知道自己在做什么的用户,因为他们必须改变模块的源代码才能做他们想做的事情,他们总是能够做到这一点,无论你多努力让他们的生活更加艰难。

总之,我的建议是很好地记录您的模块尊重您的用户及其需求,并信任他们以了解什么他们正在做。

更新

有关阻止某个模块的全局npm安装的Bash功能的工作示例,请参阅this answer - 阻止全局安装的工作示例