【问题标题】:what is the best way to deal with local dependencies on submodules in node?处理节点中子模块的本地依赖关系的最佳方法是什么?
【发布时间】:2015-03-06 17:06:44
【问题描述】:

在我们的环境中,我们有一个依赖于子模块的节点应用程序,该子模块也是一个节点模块。我们在使用 npm 链接时遇到了问题,因此我们尝试使用本地依赖项(即将 package.json 中的依赖项的值设置为 file:./path/to/dep)。这样做的问题是,当您在子模块中进行更改时,您必须在父模块中修改版本并更新它。有没有更好的方法来处理这种类型的依赖关系,以便我可以在我的子模块中进行更改并将其传播到父模块?

【问题讨论】:

  • 为什么不直接删除子模块部分并使用npm link,或者,由于子模块也是一个节点模块,只需将其添加为来自npmjs.com 的常规依赖项?

标签: node.js git-submodules


【解决方案1】:

如果您希望在子模块中所做的更改立即反映在主模块中,我知道实现此目的的唯一方法是创建从主模块的 node_modules/ 目录到子模块目录的符号链接。我真的建议找出为什么npm link 对您不起作用,因为这是实现这一目标的最佳方式。但是,如果您愿意,也可以手动创建链接。

例如,如果您的子模块的包名是“wonderful”并且您的文件结构如下所示:

main-module/
    sub-module/

然后您可以通过在主模块的根目录运行以下命令来创建指向main-module/sub-module 的符号链接main-module/node_modules/wonderful

ln -s ../sub-module ./node_modules/wonderful

然后您在子模块中所做的任何更改都将立即在主模块中使用。

对此有两点说明:

  • 在创建链接之前,确保main-module/node_modules/wonderful 不作为npm install-ed 目录存在,否则它将不起作用。
  • 当你再次npm install时,它会覆盖你的符号链接,所以如果你想经常执行上面的命令,把它放在一个shell脚本中。

【讨论】:

  • 使用 npm 链接会随着时间的推移而产生痛苦 - 请注意
【解决方案2】:

当您在子模块中进行更改时,这意味着您必须在父 repo 中进行提交(为了记录新的 gitlink,一个special entry in the index 记住你的子模块的新 SHA1)

为什么不利用这个提交机会自动执行一个脚本,该脚本将使用正确的信息修改package.json 文件?

这被称为来自内容过滤器驱动程序的'clean' script

(图片显示在“Customizing Git - Git Attributes”,来自“Pro Git book”)

干净的脚本是:

  • git config filter.<filtername>.clean ./<filterscript>声明
  • 用于.gitattributes file

它的功能是获取 npm 子模块的版本并适当地更新package.json 文件。

【讨论】:

  • 问题更多是关于节点,而不是关于它是一个 git 子模块的事实。尽管您的回答既聪明又周到,但在我们进行测试之前,我们无法做出承诺。每次更改都必须进行提交意味着我们会有一堆不必要的提交。不过还是谢谢你的回答
  • @Ben 你可以提交,如果没有成功则重置。您可以为此推送到中间 git 存储库(stackoverflow.com/a/3209767/6309:受保护的提交)
  • 谢谢,但那仍然不是我想做的。我应该能够只保存更改并在本地测试它们而无需这样做。
  • @Ben 好的,过几天我会删除答案。
  • 抱歉@VonC 不想贬低您的回答,正如我所说,它实际上非常聪明。只是从开发工作流程的角度来看,这与我们今天遇到的基本相同的问题是必须运行脚本等以保持同步......
猜你喜欢
  • 1970-01-01
  • 2010-10-24
  • 2010-12-21
  • 1970-01-01
  • 2012-09-02
  • 2010-09-21
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
相关资源
最近更新 更多