首页 > 解决方案 > 实用程序的依赖项是否进入 devDependencies?

问题描述

我正在用 NodeJS 编写一个库,供其他人使用。该库具有依赖于测试框架的测试,因此该框架列在devDependencies部分中,package.json这样任何将我的库拉入他们的代码的人都不会下载我的测试框架然后被忽略。

但是,我还有一个库的命令行界面,如果有人选择全局安装库,则应该安装它,但当其他人将库拉入他们自己的项目时,也应该忽略它。这个 CLI 有一些依赖项,所以我试图找出在哪里列出它们,以便在全局安装时(或在库本身的开发工作期间)将它们拉入,但在另一个项目将库作为其依赖项拉入时被忽略。

它看起来devDependencies是唯一的选择,但是因为它有一些限制,我想确认在继续之前确实没有更好的选择!

标签: node.jsnpm-installpackage.json

解决方案


我认为最好的方法是将 CLI 放在一个单独的包中,类似于express-generator,它是 express 的 CLI。

即使它对开发至关重要,您的库用户也只需要输入一个额外的命令,npm install library-cli如果这被正确记录,我看不到任何问题。

您还可以在postinstall安装包后将脚本或自定义脚本添加到安装 CLI 的主库中:

"scripts": {
    "postinstall": "npm install -g library-cli"
}

但是,如果您选择将 CLI 与主库捆绑在一起也很好,但是在这种情况下,您不应该将 CLI 依赖项放入devDependencies. 运行 cli 所需的所有模块都应该进入,dependencies即使 90% 的用户永远不会使用它们。

devDependencies应该用于构建过程中所需的所有工具,例如缩小、测试、打字稿等。CLI 运行时所需的所有内容都应该放入dependencies.


推荐阅读