【发布时间】:2016-01-26 22:26:15
【问题描述】:
假设我制作了一个名为 foo 的 TDD 工具,我想使用 foo v1 来帮助我开发 foo v2。
但是当我npm install --save-dev foo@^1.0.0 时,npm 说“拒绝将 foo 安装为自身的依赖项”。
- 为什么 npm 拒绝这样做?
- 我能做些什么呢?
到目前为止我得到的解决方法(以及为什么它们不够好):
-
解决方法 1: 只需使用相对要求直接要求相关脚本,例如
require('../lib')(这就是mocha does it,到目前为止我一直是这样做的)。- 但是如果您正在开发模块的新版本、添加功能,甚至可能删除旧功能,那么您不仅需要不断更改测试的内容,还需要更改它们的format,因为你实际上是在使用你正在做的事情来测试你正在做的事情。如果它坏了,你必须在没有测试的情况下在黑暗中修复它来指导你。使用 settled v1 API 来 tdd-ing 新的 v2 API 会更好。
-
解决方法 2: 以不同的名称将模块的副本发布到 npm,例如“foo-clone”。 (然后你可以安装 foo-clone 作为 foo 的 devDependency。)
- 但是这看起来很乱,而且是对 npm 的误用。无论如何,如果安装一个精确的克隆可以工作,那么 npm 允许我安装 [an old version of] foo 作为 foo 的 devDependency 会有什么危害?
【问题讨论】:
-
foo v1 和 foo v2 之间常用的任何东西都可以在其自己的 npm 模块中分支出来,并在两个版本中引用。