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

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的缓存

没关系,因为我们是本地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

私有(private)注册表:Sonatype Nexus™2.10.0-02

最佳答案

提示1

如果您“滥用” SemVer的预发布部分,则可以模仿这种行为。我已成功使用以下策略:

使用-SNAPSHOT发布模块,但是每次发布时都增加一个递增的数字(-SNAPSHOT.#-SNAPSHOT-#)。

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

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

对于从属模块,您只需要声明您的版本为

"^x.x.x-SNAPSHOT"

NPM将获取最新版本。

所有这一切都有两个原因
  • SemVer以下列方式对待预发行版1.0.0-SNAPSHOT < 1.0.0-SNAPSHOT.1 < 1.0.0-SNAPSHOT.2 < 1.0.0-SNAPSHOT.3 ...
  • NPM将始终检索最新的预发行版本

  • 警告:仅适用于补丁程序版本。从技术上讲1.2.x-SNAPSHOT大于1.1.x-SNAPSHOT,但是,SemVer在使用预发行版本时不考虑这一点。

    从文档:



    创意2
    同样,这是另一个“hack”。如果您可以丢失SemVer的补丁部分,可以将版本发布为
    x.x.<unix epoch ms>

    Unix时代在不断增长(至少到2038年为32位),并且每次发布时,您始终会发布更大的版本。

    关于maven - 在私有(private)NPM中使用SNAPSHOT,例如在Maven中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31156766/

    10-15 11:47