本地存储作为依赖关系

时间:2017-07-07 01:36:31

标签: npm node-modules npm-link

我正在开发两个repos,一个是另一个的依赖。我在上午5点。我将package.json main-repo中的依赖关系指定为../dependent-repo。当我执行npm install时,会在dependent-repo中为main-repo/node_modules创建符号链接,指向../../dependent-repo

问题是dependent-repo下面有node_modules,所以当我在依赖项之一中引用(需要或导入)某些内容时,默认解析过程解析为dependent-repo/node_modules中的依赖关系,而不是main-repo/node_modules中的依赖关系。

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

  

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

类型的参数

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

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

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

我想在测试dependent-repo/node_modules之前暂时重命名main-repo,因此在解析过程中省略了它。但是,这显然要求dependent-repo上存在main-repo的所有依赖关系。

我尝试使用paths选项tsconfig.json(在main-repo中)玩了一下,并且对paths: {"*": ["node_modules"]}之类的内容感到幸运,但无法做到让它完全发挥作用。

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

1 个答案:

答案 0 :(得分:0)

您可以在dependent repo中向git添加新的遥控器,但新的“遥控器”将位于本地盒子的某个位置。这样,您可以执行git push <remote-name> <branch>并将main回购中的回购网址指向您的遥控器。 [git how to add a local repo and treat it as a remote one 这是一个hacky解决方案,但与几个makefile一起使用时应该减轻一些痛苦。