我有一个非常简单的工作设置:
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将获取最新版本。
所有这一切都有两个原因
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在使用预发行版本时不考虑这一点。
从文档:
创意2
同样,这是另一个“hack”。如果您可以丢失SemVer的补丁部分,可以将版本发布为
x.x.<unix epoch ms>
。Unix时代在不断增长(至少到2038年为32位),并且每次发布时,您始终会发布更大的版本。
关于maven - 在私有(private)NPM中使用SNAPSHOT,例如在Maven中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31156766/