node.js - 如何支持 Node.js 命令行实用程序的插件?

标签 node.js plugins npm

我正在编写一个实用程序(用 Node.js 编写),它将从命令行调用。具体细节并不重要,但功能可以分解为单独的不相关模块,每个模块都可以独立地对最终结果做出贡献。

例如,我可以调用:

npm install -g myutil   #installs modulea and moduleb
myutil                  #invokes said modules

假设存在模块moduleamoduleb。目前,所有此类模块都捆绑为 myutil 的依赖项,但在理想的情况下,我希望将它们分开并单独安装,以便其他人编写模块

npm install -g myutil-contrib-modulec

然后在运行时检测myutil-contrib-modulec并像其他东西一样使用它。但是,也存在一些问题:

  1. 这是个好主意吗?
  2. 有支持的方法吗?常见问题解答建议全局模块应该完全独立,但我认为这是一个合理的用例。
  3. 如果根本不支持,是否有其他替代方案?例如,我能想到的一种替代方案是强制用户在每个项目本地安装额外的模块(但是,在我看来,这不是一个很好的解决方案)。

最佳答案

看看liftoff这可以帮助解决全局/本地 CLI 问题。也许您会使用它,但也许您只是阅读它来获取想法。我认为当前的策略是,如果您必须全局安装某些东西,请将其只是一个微小的 myutil 包装器包,该包装器包应该只在 some-users-project/node_modules/myutil 中定位本地包。没有理由在全局安装插件,因为它们不会直接在命令行上运行,因此这些插件应该只在本地安装。

I could think of is to force the user to install the extra modules locally per project (but, that's not a great solution IMO).

我的观点是,npm -g 通常是一个糟糕的主意。令人遗憾的是人们无法调整 PATH 环境变量或设置 shell 别名,但我可以理解为什么你想全局安装 myutil 。想要全局安装所有插件可能是错误的。但这具体取决于 myutil 的作用以及它与使用它的项目的耦合程度。从我的角度来看,我希望一切都是本地的,包括 Node 本身。我希望我的项目独立。我不想更新项目 A 的 myutil 并导致项目 B 中断作为副作用。

关于node.js - 如何支持 Node.js 命令行实用程序的插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28411580/

相关文章:

javascript - 统计 Meteor 中帖子的评论数

javascript - 无法通过子函数调用从数据库检索 Nodejs MySQl 数据

node.js - 如何在 Shell 中运行命令 CTRL+Z?

javascript - 无法将我的 JavaScript 加载到 WordPress 插件中

android - phonegap 3.3.0 中的本地通知

ruby-on-rails - 如何使用 "link_to"和 "current_page?"使用 RSpec 测试 Rails 插件

node.js - NPM 安装错误 - Node-Pre-Gyp

node.js - NPM 从 Verdaccio 实例中提取损坏的包

javascript - 公司防火墙后面的用户出现 UNABLE_TO_GET_ISSUER_CERT_LOCALLY 错误

php - Ghost Blog Install 仅显示文件索引列表