在我们的环境中,我们有一个节点应用程序,它依赖于一个子模块,它也是一个节点模块。我们使用npm链接遇到了问题,因此我们尝试使用本地依赖项(即将package.json中的依赖项值设置为file:./ path / to / dep)。这个问题是,当你在子模块中进行更改时,你必须碰撞版本&在父级中更新它。有没有更好的方法来处理这种类型的依赖关系,以便我可以只在子模块中进行更改并将其传播到父级?
答案 0 :(得分:1)
如果您希望在子模块中进行的更改立即反映在主模块中,我知道实现这一目标的唯一方法是从主模块的node_modules/
目录创建一个符号链接你的子模块的目录。我真的建议找出为什么npm link
不适合你,因为这是解决这个问题最好的方法。但是,如果您愿意,也可以手动创建链接。
例如,如果您的子模块的包名是' slave'并且您的文件结构如下所示:
main-module/
sub-module/
然后,您可以通过从主模块的根目录运行以下命令来创建指向main-module/node_modules/slave
的符号链接main-module/sub-module
:
ln -s ../sub-module ./node_modules/slave
然后,您在子模块中所做的任何更改都将立即在主模块中使用。
关于此的两点说明:
main-module/node_modules/slave
不作为npm install
- ed目录存在,否则它将无法正常工作。npm install
时,它会覆盖您的符号链接,因此如果您想经常执行上述命令,请将上述命令放在shell脚本中。答案 1 :(得分:-1)
当你在子模块中进行更改时,这意味着你有在父仓库中进行提交(为了记录新的 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
文件。