处理节点中子模块的本地依赖的最好方法是什么?

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

如果你想要在你的子模块中做出的改变立即反映在你的主模块中,唯一的方法就是创build一个从主模块的node_modules/目录到子模块目录的符号链接。 我真的build议找出为什么npm link不适合你,因为这是最好的方法。 但是,如果您愿意,也可以手动创build链接。

例如,如果你的子模块的包名是'slave',你的文件结构如下所示:

 main-module/ sub-module/ 

然后,通过从主模块的根目录运行以下命令,可以创build指向main-module/sub-module的符号链接main-module/node_modules/slave

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

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

关于这个的两个笔记:

  • 确保在创build链接之前, main-module/node_modules/slave不作为npm install -ed目录存在,否则将无法工作。
  • 当你再次npm install时候,它会覆盖你的符号链接,所以如果你想经常执行它,那么把上面的命令放到shell脚本中。

当您在子模块中进行更改时,这意味着您必须在父回购库中进行提交(为了logging新的gitlink , 索引中logging子模块的新SHA1的特殊条目 )

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

这被称为来自内容filter驱动程序的“干净”脚本 :

清洁

(从“ Pro Git book ”中的“ 自定义Git – Git属性 ”中显示的图像)

干净的脚本是:

  • git config filter.<filtername>.clean ./<filterscript>声明git config filter.<filtername>.clean ./<filterscript>
  • .gitattributes文件中使用 。

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