我有一个库,并希望鼓励/强制用户仅使用本地安装的版本。我可以通过艰难的方式或简单的方式来做到这一点。
如果NPM有一种机制可以防止对任何库使用带有npm install命令的--global
开关,那么这将是一种简单的方法。
如果代码确定它是全局安装的,而不是在本地安装,那么很难在我的NPM打包中添加早期返回的代码。
是否有人知道您是否可以阻止全球安装NPM包?什么可能是最友好的方式来解决这个问题?
答案 0 :(得分:3)
阻止用户全局安装模块的最佳方法是在文档中描述您的偏好。
如果可以在本地安装用户,则可以执行无强制用户永远不要全局安装它。如果需要,他们将始终能够手动移动文件。
在npm
社区中,假设用户可以控制他/她使用的模块,不是相反的。强迫人们以某种方式使用你的模块只会让他们不高兴。
对您的问题唯一的好答案是记录代码的使用方式。您可以要求他们以某种方式使用您的模块 - 但他们可以选择是否倾听您的意见。您可以声明使用全局安装的模块不受支持,不明智,不鼓励,危险,但您无法强制用户根据需要使用该模块,这是一件好事。
现在,对于一些错误答案,您始终可以测试模块根目录的父目录是否为node_modules
,如果不是,则会失败,但我确定如果有人碰巧在您本地安装您的模块但在不同的目录下,它可能会导致一些麻烦。您可以查看模块是否从节点用于搜索模块的其中一个默认路径运行,但这些路径并不总是相同,并且您还必须考虑NODE_PATH
环境变量。
你可以做一些这样的技巧,但他们只能惹恼那些知道自己在做什么的用户,因为他们必须改变模块的源代码才能做他们想做的事情,他们总是能够做到这一点,无论你多努力让他们的生活更加艰难。
总之,我的建议是很好地记录您的模块和尊重您的用户及其需求,并信任他们以了解什么他们正在做。
有关阻止某个模块的全局npm
安装的Bash功能的工作示例,请参阅this answer - 阻止全局安装的工作示例。