我有一个带有“应用程序”和一个库的有角度的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
有一些明显的改进我现在不在乎解决: