【问题标题】:Local repos as dependencies本地存储库作为依赖项
【发布时间】:2017-12-11 04:33:39
【问题描述】:

我正在开发两个存储库,一个依赖于另一个。我在 npm v5 上。我将main-repopackage.json 中的依赖关系指定为../dependent-repo。当我执行npm install 时,这会在main-repo/node_modules 中为dependent-repo 创建一个符号链接,指向../../dependent-repo

问题是dependent-repo 在它下面有自己的node_modules,所以当我在 its 依赖项之一中引用(要求或导入)某些东西时,默认解析过程会解析为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 以引入最新的更改.这正是我试图避免的。

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

我尝试在tsconfig.json(在main-repo)中使用paths 选项,并且对paths: {"*": ["node_modules"]} 之类的东西有一些运气,但无法让它完全工作。

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

【问题讨论】:

  • 我知道你试图避免基于 Git 的依赖风格,但它是处理 NodeJS 子依赖的最安全方式,特别是如果你的项目增长并使用容器和 CI 的东西。我会首先使用 git-hooks 和 NPM 脚本进行一些自动化操作。

标签: npm node-modules npm-link


【解决方案1】:

您可以在 dependent 存储库中向 git 添加一个新的远程,但新的“远程”将在您本地的某个地方。这样,您可以执行 git push <remote-name> <branch> 并将 repo url 指向您的 main repo 以从您的遥控器中提取。 [git how to add a local repo and treat it as a remote one 这是一个 hacky 解决方案,但与几个 makefile 一起使用时应该会减轻一些痛苦。

【讨论】:

  • 生成文件?那些是什么?
猜你喜欢
  • 2013-12-06
  • 2014-03-01
  • 2012-02-03
  • 2011-02-18
  • 2020-07-13
  • 2016-11-13
  • 2014-06-28
  • 2014-06-18
  • 2013-07-27
相关资源
最近更新 更多