3

我正在开发两个存储库,一个依赖于另一个。我在 npm v5 上。我在as中指定依赖package.json项。当我这样做时,这会为in创建一个符号链接,指向.main-repo../dependent-reponpm installdependent-repomain-repo/node_modules../../dependent-repo

问题是它下面dependent-repo有它自己的东西,所以当我在它的node_modules依赖项之一中引用(需要或导入)某些东西时,默认解析过程会解析为 in 的依赖,而不是 in 的依赖。dependent-repo/node_modulesmain-repo/node_modules

这被证明是 TypeScript 的一个问题,因为它显然认为 与main-repo/node_modules/@angular/core不同dependent-repo/node_modules/@angular/core,即使它们是相同的版本,并且逐字节相同。这会导致以下形式的 TS 错误

“ViewContainerRef”类型的参数不能分配给“ViewContainerRef”类型的参数。

我对这个问题很熟悉,因为我在使用npm link. 该问题已在 TS 问题列表中进行了广泛讨论,但据我所知没有解决方案。我希望 npm v5 能以某种方式神奇地解决这个问题,但到目前为止还没有运气。

我尝试将依赖项指定为file://../dependent-repo,但这也只是创建了相同的符号链接(至少在 npm5 中;我似乎记得在早期版本中,如果可能复制了目录锁、库存和桶)。

目前我能看到的唯一解决方法是让依赖项指向 github 服务器,然后提交并推送我所做的每一个更改,然后npm install在主 repo 上重新运行以引入最新的更改。这正是我试图避免的。

dependent-repo/node_modules在测试之前想到了临时重命名main-repo,所以在解析过程中省略了。但是,这显然需要 的所有依赖项dependent-repo都存在于main-repo.

我尝试使用(in ) 的paths选项进行一些操作,并且对 类似的东西有一些运气,但无法让它完全发挥作用。tsconfig.jsonmain-repopaths: {"*": ["node_modules"]}

我知道angular-cli可能对其内部 webpack 配置进行了一些更改以使其更好地工作,但不幸的是,我main-repo使用的是较旧的 webpack 构建过程,并且我无法进行一些建议的更改,例如resolve: {fallback: [path.join(__dirname, 'node_modules')]}resolve: { modules: [ path.join(__dirname, "node_modules") ] }为我工作。

4

1 回答 1

0

您可以在 repo 中向 git 添加一个新的遥控器dependent,但新的“遥控器”将在您本地盒子的某个地方。这样,您可以在您的 repo 中执行git push <remote-name> <branch>并指向 repo urlmain以从您的遥控器中提取。[ git 如何添加本地存储库并将其视为远程存储库 ,这是一个 hacky 解决方案,但与几个 makefile 一起使用时应该会减轻一些痛苦。

于 2017-07-19T20:31:27.337 回答