# NPM包管理工具

这个部分是扩展npm命令的篇章,主要应用场景:

  • 版本号管理
  • 发包

# 版本号管理

image-20220528102521776

npm version命令是用来管理package.json中的version属性的。

相比于使用git tag命令,npm version = 修改package.json中的version + git tag打标签。

并且,npm version针对于语义化的版本号,设置了不同的命令:

预发布相关:

  • prerelease
  • prepatch
  • preminor
  • premajor

正式发布相关

  • patch
  • minor
  • Major

# 预发布相关

# npm version

这里主要是npm version命令的相关介绍。

-> npm version --help

npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]
(run in package dir)
'npm -v' or 'npm --version' to print npm version (6.4.1)
'npm view <pkg> version' to view a package's published version
'npm ls' to inspect current package/dependency versions

直接使用npm version:

{
  'vue3-toimc-admin-doc': '1.0.0',
  npm: '6.14.17',
  ares: '1.18.1',
  brotli: '1.0.9',
  cldr: '40.0',
  icu: '70.1',
  llhttp: '2.1.4',
  modules: '83',
  napi: '8',
  nghttp2: '1.42.0',
  node: '14.19.2',
  openssl: '1.1.1n',
  tz: '2021a3',
  unicode: '14.0',
  uv: '1.42.0',
  v8: '8.4.371.23-node.87',
  zlib: '1.2.11'
}

# prerelease

pre-预

release-发布版

所以,prerelease就是预发版。

TIP

记住:release是最后面的号。

原则:

  • 当执行npm version prerelease时,如果没有预发布号,则增加minor,同时prerelease 设为0;
  • 如果有prerelease, 则prerelease 增加1。
# package.json 中的版本号1.0.0变为 1.0.1-0npm version prerelease
v1.0.1-0

# 再次执行 package.json 中的版本号1.0.1-0变为 1.0.1-1npm version prerelease
v1.0.1-1

# 如何手动修改,version为1.0.0-1,再次执行npm version prerelease
v1.0.0-2

# prepatch

直接升级小号,增加预发布号为0。

TIP

因为跟pre预发布有关,所以会带个尾巴。

# package.json 中的版本号1.0.1-1变为 1.0.2-0npm version prepatch
v1.0.2-0

# preminor

直接升级中号,小号置为0,增加预发布号为0。

npm version preminor
v1.1.0-0

# premajor

直接升级大号,中号、小号置为0,增加预发布号为0。

npm version premajor
v2.0.0-0

# 正式版本相关

# patch

TIP

记住:patch是小号。

原则:

  • patch:如果有prerelease ,则去掉prerelease ,其他保持不变;
  • 如果没有prerelease ,则升级minor,即是最小号。
# package.json 中的版本号2.0.0-0变为 2.0.0;npm version patch
v2.0.0

# package.json 中的版本号2.0.0变为 2.0.1;
# 再次执行npm version patchnpm version patch
v2.0.1

# minor

TIP

记住:minor是中间的号。

原则:

  • 如果没有prerelease,直接升级minor, 同时patch设置为0;
  • 如果有prerelease, 首先需要去掉prerelease;
  • 如果patch为0,则不升级minor;
  • 如果patch不为0, 则升级minor,同时patch设为0;
npm version minor
v2.1.0

# npm version premajor 2.1.0–> 3.0.0-0;
# npm version minor 3.0.0-0–> 3.0.0;
# npm version prepatch 3.0.0–>3.0.1-0;
# npm version minor 3.0.1-0–>3.1.0;

# major

TIP

记住: major是主号,也是大号

# 如果没有premjor,则直接升级major,其他位都置为0;npm version major
v4.0.0
➜ npm version major
v5.0.0
# 如果有premajor,则会去掉premajor版本号;npm version premajor
v6.0.0-0
➜ npm version major
v6.0.0

# 如果有preminor/prepatch/prerelease,则会去掉`release`版本;npm version prepatch
v6.0.3-0
➜ npm version major
v7.0.0

# 如果有minor/patch,则会直接置0,升级主版本号;npm version patch
v7.2.1
➜ npm version major
v8.0.0

主要目的升级major,原则:

  • 如果没有premajor,则直接升级major,其他位都置为0;如果有premajor,则会去掉premajor版本号;
  • 如果有preminor/prepatch/prerelease,则会去掉release版本;
  • 如果有minor/patch,则会直接置0,升级主版本号;

# 发包相关

常见的npm publishnpm linknpm login这里不介绍了,主要介绍与发包之后的命令:

  • 查看历史版本
  • 删除版本
  • 废弃版本

# 查看历史版本

言归正传,如何查看已发布包的历史版本呢?

使用命令:

// 查看历史版本信息(最多100条)
npm view [<pkg>][@<version>] versions
// 假设我的包名是test 版本号是1.0.0
npm view test@1.0.0 versions

一般来说,这个命令就已经够了,如果发布的版本有100个以上,可能下面的这个命令能用的上。

和上面的类似,只需在后面加上 --json 即可查看所有的历史版本。

// 查看所有版本信息
npm view [<pkg>][@<version>] versions --json
// 假设我的包名是test 版本号是1.0.0
npm view test@1.0.0 versions --json

如果想查看最新的版本呢?

// 查看最新版本信息
npm view [<pkg>][@] version
// 假设我的包名是test 版本号是1.0.0
npm view test@1.0.0 version

注意细节哦,versions少了一个s

但是这个是针对正式版本的,如果是测试版本,是不会出现在最新版本的查询里的。

# 删除版本

删除版本前,一定要确认这个版本的包已经没有依赖(废弃)了。

// 假设我的包名是test 测试版本号是1.0.0-beta.0
// 删除包的指定版本
npm unpublish test@1.0.0-beta.0 
 
// 强制删除包的指定版本
npm unpublish test@1.0.0-beta.0 --force
 
// 删除包
npm unpublish test
 
// 强制删除包
npm unpublish test --force

# 废弃版本

什么是废弃版本?

就是npm包还在,但是受某些因素影响,该包不再维护,不再更新了。

简单来说,就是不影响使用,但是在安装废弃版本的时候会有提示。

npm deprecate <pkg>[@<version>] <message>
 
// 假设我的包名是test 版本号是1.0.1
npm deprecate test '不再维护'
npm deprecate test@1.0.1 '不再维护'