2

最近,我们将 Db 模型(Sequelize)移到了一个单独的存储库,并使用 Github 包发布它。

当我们将它移动到一个单独的存储库时,我们发现我们需要根据环境(生产/暂存/开发)安装不同的版本,
例如:

  • 生产版需要v1.2,
  • 分期需要 v1.3 等。

由于我们希望避免手动进入每个依赖服务并更新所需的版本,因此我们希望使用 dist-tags 来管理它。

因为我们会package.json根据环境将拉包版本标记为“staging”和“production”,并且我们想要发布一个新版本,例如我们会将 1.3 标记为“production”。

不幸的是,dist-tagsGitHub 注册表似乎不支持,所以我们正在寻找其他方法。

有什么建议么?

4

1 回答 1

0

如果可能(意味着如果没有敏感信息,尤其是生产参数),您将版本三个单独的文件:

  • 包.json.dev
  • 包.json.stg
  • 包.json.prd

然后,想法将不是版本package.json(保持私有),而是根据当前执行环境从这些文件之一生成它(其中包含正确的值)。

例如,您可以在每个环境中有单独的分支,其中包含正确的文件。
生成脚本将确定签出分支的名称:

branch=$(git rev-parse --symbolic --abbrev-ref HEAD)

这意味着您可以:

  • 版本只是一个模板文件package.json.tpl
  • 以分支命名的版本值文件: package.json.dev, package.json.stg: 由于它们不同,因此在合并或切换分支时不会出现合并问题。

最后,您将(在.gitattributes声明中)注册一个内容过滤器驱动程序

弄脏 (图片来自“ Customizing Git - Git Attributes ”,来自“ Pro Git book ”)

smudge与模板文件 ( ) 相关联的脚本将通过在正确的值文件中查找值package.json.tpl来生成(自动,在 上git checkout)实际文件。 生成的实际文件仍然被忽略(由)。 package.jsonversion.<branch>
package.json.gitignore

请参阅“分支之间的 git smudge/clean filter ”中的完整示例。

于 2019-11-24T10:22:21.060 回答