防止全局安装 NPM 包

3
我有一个库,希望鼓励/强制用户仅使用本地安装的版本。我可以通过艰难的方式或简单的方式实现这一目标。
简单的方法是如果NPM有一种机制来防止在npm install命令中使用--global开关来安装任何库。
艰苦的方式是在我的NPM包中添加代码,如果代码确定是全局安装而不是本地安装,则提前返回。
有人知道如何防止全局安装NPM包吗?最友好的方法可能是什么?

以下是我的帖子链接:https://dev59.com/g5vga4cB1Zd3GeqP5apE#40069556,它回答了您的问题吗?如果确实解决了您的问题,那么您可以考虑接受答案,因为现在其他搜索此问题的人会看到您的问题没有好的答案,可能不会阅读它。如果它没有解决您的问题,请在评论中指出缺失的内容。我正在查看我的旧答案,如果它们需要改进,我会进行更新。谢谢。 - rsp
@rsp 可能和任何一种方法一样好,已被接受。 - Alexander Mills
1个回答

3

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

如果用户可以本地安装模块,您无法强制他们永远不要全局安装。如果他们想要,他们总是可以手动移动文件。

在npm社区中,假定用户对其使用的模块有控制权,而不是相反。强迫人们以某种方式使用您的模块只会让他们不满意。

因此,对于您的问题,唯一的好答案是记录代码应该使用的方式。您可以要求他们以某种方式使用您的模块,但他们可以选择听取您的建议或不听取。您可以声明全局安装您的模块是不受支持、不明智、不鼓励、危险的,但您将无法强制用户按照您的方式使用模块,这是一件好事。

现在,对于一些错误的答案,你可以测试你的模块根目录的父级是否命名为node_modules,如果不是就会失败,但我确定如果有人以你想要的方式本地安装了你的模块但是在不同的目录下,这可能会引起一些麻烦。你可以查看你的模块是否从节点用于搜索模块的默认路径之一运行,但这些路径并不总是相同的,而且你还必须考虑NODE_PATH环境变量。
你可以做一些类似的技巧,但它们只会让知道自己在做什么的用户感到恼怒,因为他们将不得不更改你的模块源代码以达到他们想要的效果,而且他们始终能够做到这一点,无论你多么努力地使他们的生活更加困难。
总之,我的建议是充分记录你的模块尊重你的用户和他们的需求,并相信他们知道自己在做什么。

更新

如果您需要一个防止某个模块全局安装的Bash函数的工作示例,请查看this answer - 防止全局安装的工作示例部分。


好答案 - 你能否谈一下在.bash_profile / .bashrc等文件中使用别名或类似特性的问题吗?使用这种方法,可以避免NVM用户在切换Node版本时有时会遇到的问题,并随后失去全局安装模块的情况。 - Alexander Mills
抱歉,我忘记了这是我提出的另一个问题 => 请参见 => http://stackoverflow.com/questions/40067055/avoiding-npm-global-install-using-bash-profile-and-postinstall-script/40069979#40069979 - Alexander Mills
1
@AlexanderMills 我更新了这个答案,加入了有关函数的信息。 - rsp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接