如何处理 npm 包依赖的依赖?

开发一个 npm 包叫 a, 依赖了第三方依赖 b, b 的代码打包时候会被打入 a 中,需要把 b 安装成什么包呢?

dependencies、devDependencies 还是 peerDependencies?
dependencies 用户在使用我的包时,会自动安装 b,但是其实不需要安装b。
peerDependencies 要求用户的项目中安装了 b ,
devDependencies 在 npm i 时,不会自动,符合我的期望,
但是我发现 npm 上很多开发者没有把依赖安装到 devDependencies,而是 dependencies。
关于这个,没有搜索到官方权威的说法。

阅读 290
1 个回答

如果你的包 a 已经把依赖 b 的代码打包进去了,理论上应该把 b 放在 devDependencies 里才对。这样用户安装你的包时就不会重复安装 b 了。

但你发现很多包都把这种情况下的依赖放在了 dependencies 中,这是有原因的。大多数开发者这么做是为了保险 - 万一打包过程中有些东西没打包完全,或者用户在特定环境下需要访问原始依赖。

我个人建议是:如果你确定 b 完全被打包进了你的代码,而且用户绝对不需要单独访问 b,那就放在 devDependencies 里。这样更干净,用户安装时也不会下载不需要的东西。

不过说实话,很多时候打包并不是那么"完美",可能会有一些边缘情况。所以很多包维护者为了避免用户遇到奇怪的问题,就宁可让用户多装一个包,也不想冒风险。

你可以先试试放在 devDependencies 里,然后好好测试一下各种使用场景,确保没问题再发布。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题