npm仅在角度monorepo中更改时才发布

时间:2019-02-12 16:04:23

标签: angular npm monorepo

我有一个带有“应用程序”和一个库的有角度的monorepo,该库以其自己的npm软件包发布。这是在CI环境中自动完成的。到目前为止,库和应用程序是分开的,并且具有单独的构建作业。既然它们已经一起构建,我将面临一个问题,即lib会随每个构建一起发布(对master的每次更改),即使更改可能已经(而且很可能是在应用程序中)出现了。

是否有一种简单的方法仅在npm软件包的内容自上次发布以来已更改时才发布?

如果我运行npm info <the-package>,会有一个.shasum.integrity校验和,我希望我可以在运行npm publish <directory> --dry-run时将它们与相同的值进行比较。不幸的是,即使软件包的内容完全相同,这些命令也会导致不同的校验和。 **

**为了验证这一点,我将发布的tarball的内容与lib的新构建的dist /版本进行了比较。两个目录中的diff -r没有显示出差异。

更新

由于缺乏更好的主意,我用bash破解了一个手动解决方案(因为我的lib的发布总是在bash脚本中进行)。因为在我的情况下,每个发行版都带有标签,所以我获得了最后一个标记的提交,并检查此后库中是否有任何更改。这绝不是一个好的解决方案,您可能不应该使用它,但以防它对某人有所帮助:

PATH_TO_LIB='./projects/the-lib'

# find the last tagged commit and assume it was the last release
TAG=$(git describe --abbrev=0)
COMMIT=$(git rev-list -n 1 $TAG)

# check if anything changed in the lib since the last release
CHANGED=$(git diff --name-only HEAD $COMMIT $PATH_TO_LIB)
if [ ! -n "$CHANGED" ]; then
    exit 0
fi

有一些明显的改进我现在不在乎解决:

  • 脚本应忽略由于发布以外的其他原因标记的提交
  • 应该以某种方式存储最新版本,否则不能保证您实际上正在检查自从上次发布lib以来的最新版本。
  • 忽略某些不需要进行新发行的更改可能很有意义

0 个答案:

没有答案