npm更新版本失效, npm version patch, npm version minor, npm version major, npm update

发布和更新package封面

一、关于发布和更新package

遇到问题 - npm version patch没有更新版本!

首次在npm发布了一个简单的包,发布成功后,又新增了一个 readme.md 文件把项目描述清晰,执行更新命令 npm version patch,输出了版本号,但是查看npm网站和执行 npm view versions 查看也没有更新版本,究竟是什么情况呢?

# 第一次发布
$ npm publish
# 输出
...
npm notice Publishing to https://registry.npmjs.org/
+ [email protected]

# 新增 readme.md 文件后
$ npm version patch
# 输出
v0.0.2

# 这时查看版本列表
$ npm view create-captcha versions
# 输出 只有一个版本
0.0.1

只执行 npm version patch的情况下,线上包没有更新成功。

如何处理让更新生效?

在npm官网继续查看文档,发现执行了 version 更新操作后,也需要执行 npm publish 才会发布新版本。npm version patch/minor/major 三个命令执行后,都需要执行 npm publish 进行发布。

# 微小版本更新,对应版本号v0.0.1 就是 v<major>.<minor>.<patch>, v微小更新.次要更新.主要更新
$ npm version patch
$ npm publish

$ npm version minor
$ npm publish

$ npm version major
$ npm publish

查看更新发布结果

查看结果有2中方法,一是打开 npmjs.com 搜索自己的包,点进去查看版本号,另一个就是通过终端命令行的方式查看。

# 列出所有线上版本
$ npm view create-captcha versions
# 输出
[ '0.0.1', '0.0.2' ]

# 仅列出线上最新版本
$ npm view create-captcha version
# 输出
0.0.2

二、关于开发项目更新依赖 npm update

当发布了包的更新版本后,在依赖包的项目中使用 npm update 进行更新,却发现没有更新成功。于是再查看 npm 文档得出缘由。

项目依赖版本标识的不同含义

在我们项目的 package.json中,标识依赖版本的字段有3种表示方法分别对应不同的更新规则。
无论是在 dependencies 还是在 devDependencies 字段中,^ 代表大版本一致,~ 表示次要版

"dependencies": {
    
    
	"pkg1": "^1.2.3",  // 安装大版本为1的latest最新版本
	"pkg2": "~1.2.3", // >=1.2.3 <1.3.0,次要版本不能高,只更新补丁小版本
	"pkg3": "1.2.3",  // 具体版本
	"pkg4": "^0.1.2"  // 大版本低于1.0.0
	"pkg5": "^0.0.1", // 大版本低于1.0.0
	}

pkg1 使用 ^ 进行标识,可以安装大版本一致的最新版本 (>=1.2.3 <2.0.0);
pkg2 使用 ~ 进行标识,可以安装次要版本一致的最高版本 (>=1.2.3 <1.3.0);
pkg3 没有标识符号,只能安装具体固定版本 1.2.3;

特别地,当大版本低于 1.0.0时,^的作用就不是限定大版本了
pkg4 使用 ^ 进行标识,;
pkg5 使用 ^ 进行标识,这种情况只能先提高package.json的版本号才能进行更新。

以React版本为例

我们使用 npm view react versions 查看 react的所有版本

以react 版本删减作为示例
[
‘0.0.1’, ‘0.0.2’, ‘0.0.3’,
‘0.1.2’,
‘0.2.0’, ‘0.2.1’, ‘0.2.6’,
‘0.3.0’, ‘0.3.4’,
‘0.14.0’, ‘0.14.1’, ‘0.14.10’,
‘15.0.0’, ‘15.0.1’,
‘18.2.0’
]

新建一个目录,初始化项目,然后安装最低版本 react

$ mkdir test-react
$ cd test-react
$ npm init -y
$ npm i [email protected] -S

我们在 package.json 中得到依赖版本号

"dependencies": {
    
    
    "react": "^0.0.1"
}

然后尝试进行更新

$ npm update react -S
# 输出 up to date, audited 2 packages in 34s

update命令在package.json中低于1.0.0版本的react进行更新,提示已经是最新版。接下来把package.json中版本改为0.0.2,再执行一次更新命令。

// package.json
"react": "^0.0.2"

// shell
$ npm update react -S
# 输出 changed 1 package, and audited 2 packages in 8s

react更新成功变为来0.0.2,由此可见低于1.0.0版本时,^符号标识的版本只能限定在它标识的小版本内。

再次改动package.json,把react 改成次要版本为2,即 "react": "^0.2.0",执行更新

$ npm update react -S
# 输出 added 3 packages, changed 1 package, and audited 5 packages in 11s
# 此时 node_modules目录有 ensure-array eventemitter2 react sprintf 四个目录

此时查看package.json 依赖已变为 “react”: “^0.2.6”, 更新到了次要版本为2的最新版本,下一个版本就是0.3.0。再贴一次版本号列表进行查看,到此我们知道了低于1.0.0时 ^符号是怎么一个规则作用。
[
‘0.0.1’, ‘0.0.2’, ‘0.0.3’,
‘0.1.2’,
‘0.2.0’, ‘0.2.1’, ‘0.2.6’,
‘0.3.0’, ‘0.3.4’,
‘0.14.0’, ‘0.14.1’, ‘0.14.10’,
‘15.0.0’, ‘15.0.1’,
‘18.2.0’
]

另一个方法,通过重新安装最新版本来进行更新 npm i xxx@latest -S

回归到我自己发布的包上面,重新执行安装命令也可以把依赖更新到最新版本,react当然也一样啦,快试试吧。

$ npm install create-captcha@latest -S
# 输出
changed 1 package, and audited 2 packages in 4s

如何正确使用版本标识?

  1. 当我们开启一个新项目时,安装使用最新的依赖包一般是一个不错的选择,毕竟旧版本慢慢会失去维护。

  2. 但是当我们是在已有项目中开发,那我们就需要保证依赖的版本能兼容项目,并且最好与生产服务器中部署的版本高度一致,从而避免生产和开发环境不一致导致排查问题时非常困难。

查看版本更新结果

使用 npm list 可以查看当前项目中安装的所有依赖版本。

$ npm list

无论是开发发布包,还是在项目中使用依赖,我们都需要对版本有一个清晰的了解,做好这一步可以避免后面开发过程出现环境相关的问题,提高开发效率和幸福感!

猜你喜欢

转载自blog.csdn.net/zhouweihua138/article/details/129523382
NPM