我有一个非常简单的工作设置:
Lib A Lib B
publish 1.0.0-SNAPSHOT -> Private Registry -> npm install
请记住,A和B在不同的机器上(想想jenkins群集!)。
在两个版本中,版本以" -SNAPSHOT"结束。并在每个版本(A)上更新。当然,依赖的库(B,...)应该始终使用注册表中的最新版本。 问题是,NPM不会重新获取相同的版本。
Lib A Lib B
small change, rebuild:
publish 1.0.0-SNAPSHOT -> Private Registry !! npm install -f
npm cache clean
!! npm install -f
rm -rf node_modules
-> npm install
那没关系,因为我们是本地的npm代理: "〜/ .npmrc":
force=true
cache-min=0
cache-max=0
但这确实不工作!只删除node_modules目录才有效。这不是一个有用的解决方案,因为开发人员不需要使用" rm -rf node_modules&& npm install"。
使用maven这个设置有效,因为我们使用" -U"选项。这会强制maven检查更新的SNAPSHOT版本是否可用。 NPM不理解SNAPSHOT的概念,但至少每次都应该询问注册表。
npm版本2.12.0
私人注册:Sonatype Nexus™2.10.0-02
答案 0 :(得分:19)
创意1
如果你"虐待"你可以模仿这种行为。 SemVer的预发布部分。我已成功使用以下策略:
使用-SNAPSHOT
发布模块,但每次发布(-SNAPSHOT.#
或-SNAPSHOT-#
)时附加一个递增的数字。
例如:"x.x.x-SNAPSHOT.1"
第一次发布,然后"x.x.x-SNAPSHOT.2"
第二次发布,依此类推。
确保使用一致的模式。所以,例如,如果你使用点,坚持点,或者如果你使用破折号,坚持使用破折号。
对于依赖模块,您只需要将版本声明为
"^x.x.x-SNAPSHOT"
和NPM将获取最新版本。
由于两个原因,所有这些都有效
1.0.0-SNAPSHOT < 1.0.0-SNAPSHOT.1 < 1.0.0-SNAPSHOT.2 < 1.0.0-SNAPSHOT.3
... 警告:这只适用于修补程序版本。从技术上讲,1.2.x-SNAPSHOT大于1.1.x-SNAPSHOT,但SemVer在使用预发布时不考虑这一点。
来自文档:
如果版本具有预发布标记(例如,1.2.3-alpha.3),那么它 如果至少有一个,则只允许满足比较器组 具有相同[major,minor,patch]元组的比较器也有一个 预发布标签。
例如,范围&gt; 1.2.3-alpha.3将被允许匹配 版本1.2.3-alpha.7,但3.4.5-alpha.9不满足, 即使3.4.5-alpha.9在技术上&#34;大于&#34; 1.2.3-alpha.3 根据SemVer排序规则。版本范围仅接受 1.2.3版本上的预发布标签。版本3.4.5将满足 范围,因为它没有预发布标志,而3.4.5是 大于1.2.3-alpha.7。
创意2 再次,这是另一个&#34; hack&#34;。如果您对丢失SemVer的补丁部分感到满意,可以将版本发布为
x.x.<unix epoch ms>
。
unix时代不断增加(至少到2038年为32位),每次发布时,你都会发布一个更大的版本。