在私有NPM中使用SNAPSHOT,就像在Maven中一样

Tri*_*tan 23 snapshot maven npm

我有一个非常简单的工作设置:

Lib A                                             Lib B
publish 1.0.0-SNAPSHOT  ->  Private Registry  ->  npm install
Run Code Online (Sandbox Code Playgroud)

请记住,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
Run Code Online (Sandbox Code Playgroud)

想法:全局禁用NPM缓存

那没关系,因为我们是一个本地的npm代理:"〜/ .npmrc":

force=true
cache-min=0
cache-max=0
Run Code Online (Sandbox Code Playgroud)

但是,这并没有工作!只删除node_modules目录才有效.这不是一个有用的解决方案,因为开发人员不需要使用"rm -rf node_modules && npm install".

使用maven,这个设置有效,因为我们使用"-U"选项.这会强制maven检查更新的SNAPSHOT版本是否可用.NPM不理解SNAPSHOT的概念,但至少每次都应该询问注册表.

npm版本2.12.0

私人登记处:Sonatype Nexus™2.10.0-02

dus*_*ltz 23

想法1

如果你"滥用"SemVer的预发布部分,你可以模仿这种行为.我成功使用了以下策略:

发布您的模块,-SNAPSHOT但每次发布(-SNAPSHOT.#-SNAPSHOT-#)时附加一个递增的数字.

例如:"x.x.x-SNAPSHOT.1"第一次发布,然后"x.x.x-SNAPSHOT.2"是第二次发布,依此类推.

确保使用一致的模式.因此,例如,如果您使用点,坚持使用点,或者如果您使用破折号,请坚持使用破折号.

对于依赖模块,您只需将您的版本声明为

"^x.x.x-SNAPSHOT"
Run Code Online (Sandbox Code Playgroud)

和NPM将获取最新版本.

由于两个原因,所有这些都有效

  1. SemVer以下列方式处理预发布1.0.0-SNAPSHOT < 1.0.0-SNAPSHOT.1 < 1.0.0-SNAPSHOT.2 < 1.0.0-SNAPSHOT.3...
  2. NPM将始终检索最新的预发布版本

警告:这只适用于补丁版本.技术上1.2.x-SNAPSHOT大于1.1.x-SNAPSHOT,但是,SemVer在使用预发布时不考虑这一点.

来自文档:

如果版本具有预发布标记(例如,1.2.3-alpha.3),则只有至少一个具有相同[major,minor,patch]元组的比较器也具有预发布标记时,才允许它满足比较器集.

例如,范围> 1.2.3-alpha.3将被允许匹配版本1.2.3-alpha.7,但它不会被3.4.5-alpha.9满足,即使3.4.5-alpha根据SemVer排序规则,.9在技术上"大于"1.2.3-alpha.3.版本范围仅接受1.2.3版本上的预发布标记.版本3.4.5将满足范围,因为它没有预发布标志,并且3.4.5大于1.2.3-alpha.7.

想法2 再次,这是另一个"黑客".如果你没有丢失SemVer的补丁部分,你可以将你的版本发布为

x.x.<unix epoch ms>.

unix时代不断增加(至少到2038年为32位)并且每次发布时,您将始终发布更大的版本.

  • npm如何比较版本?1.0.0-SNAPSHOT.9是否大于1.0.0-SNAPSHOT.10? (3认同)