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

what is the best way to deal with local dependencies on submodules in node?

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

当您在子模块中进行更改时,这意味着您必须在父仓库中进行提交(以便记录新的gitlink, a special entry in the index 记住你的子模块的新 SHA1)

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

从内容过滤器驱动程序调用 'clean' script

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

干净的脚本是:

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

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

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

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

main-module/
    sub-module/

然后你可以创建一个符号 link main-module/node_modules/wonderful 指向 main-module/sub-module 通过 运行 从主模块的根目录执行以下命令:

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

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

两个注意事项:

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