【问题标题】:Preventing global installations of an NPM package防止全局安装 NPM 包
【发布时间】:2016-10-18 21:12:43
【问题描述】:

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

最简单的方法是,如果 NPM 有一种机制可以防止在 npm install 命令中使用--global 开关,用于任何库。

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

有谁知道您是否可以阻止 NPM 包的全局安装?解决此问题的最用户友好的方式可能是什么?

【问题讨论】:

  • my post below 回答您的问题了吗?如果确实如此,那么您可以考虑accepting the answer,因为现在其他搜索此问题的人看到您的问题没有好的答案并且可能不会阅读。如果它没有回答您的问题,请评论缺少的内容。我正在浏览我的旧答案,如果他们需要改进,我想更新它们。谢谢。
  • @rsp 可能和任何人一样好,接受

标签: node.js npm


【解决方案1】:

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

如果您的用户可以在本地安装它,那么您可以采取任何操作来强制他们永远不要在全局范围内安装它。如果他们愿意,他们将始终能够手动移动文件。

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

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

现在,对于一些不好的答案,您可以随时测试模块根目录的父级是否命名为node_modules,如果不是则失败,但我相信它可以如果有人碰巧将您的模块安装在您想要的本地但在不同的目录下,则会引起一些麻烦。您可以查看您的模块是否从节点用于搜索模块的默认路径之一运行,但这些路径并不总是相同,您还必须考虑 NODE_PATH 环境变量。

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

总之,我的建议是详细记录您的模块尊重您的用户和他们的需求,并相信他们知道什么他们在做。

更新

有关阻止全局 npm 安装某个模块的 Bash 函数的工作示例,请参阅 this answer - 阻止全局安装的工作示例部分。

【讨论】:

  • 不错的答案 - 你能解决在 .bash_profile / .bashrc 等中使用别名或类似功能的问题吗?使用该方法,它避免了 NVM 用户有时在 Node 版本之间切换以及随后丢失全局安装模块的站点时遇到的问题。
  • 抱歉忘记这是我问的一个单独问题 => 请参阅 => stackoverflow.com/questions/40067055/…
  • @AlexanderMills 我用函数信息更新了this answer
猜你喜欢
  • 2017-11-05
  • 2020-10-23
  • 2021-04-13
  • 2023-04-03
  • 2019-12-22
  • 2019-06-26
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多