npm 从入门到精通(三):再进阶,掌握版本管理、脚本系统与包发布

0 阅读5分钟

npm 系列文章总规划

《npm 从入门到精通》系列

系列目录

  1. npm 从入门到精通(一):先会用,30 分钟掌握 npm 最常用命令
  2. npm 从入门到精通(二):再理解,彻底搞懂 package.json、node_modules 和 package-lock
  3. npm 从入门到精通(三):再进阶,掌握版本管理、脚本系统与包发布
  4. npm 从入门到精通(四):再工程化,面向团队协作的 npm 最佳实践

第三篇:npm 从入门到精通(三):再进阶,掌握版本管理、脚本系统与包发布

当你已经会用 npm,也理解了 package.jsonnode_modulespackage-lock.json 的关系,接下来就要进入真正的进阶阶段了。

这一阶段的关键词是:

  • 版本管理
  • 脚本系统
  • 包发布

这些能力决定了你是“会装包”,还是“会管理项目”。


一、先搞懂 npm 版本号规则

npm 的版本号通常长这样:

1.2.3

它遵循 SemVer(语义化版本) 规范,也就是:

  • 1:主版本号(major)
  • 2:次版本号(minor)
  • 3:修订号(patch)

含义

  • 1.2.3 -> 1.2.4:修复 bug
  • 1.2.3 -> 1.3.0:新增功能,但兼容旧版本
  • 1.2.3 -> 2.0.0:重大变更,可能不兼容

二、^~、固定版本分别是什么意思

package.json 里你经常会看到:

"axios": "^1.8.0"

或者:

"lodash": "~4.17.21"

这些符号决定了依赖升级范围。

^

表示允许升级到同一主版本内的更高版本。

例如:

"react": "^19.0.0"

允许安装:

  • 19.0.1
  • 19.2.0

但不会升到:

  • 20.0.0

~

表示允许升级到同一小版本内的补丁版本。

例如:

"lodash": "~4.17.20"

允许安装:

  • 4.17.21

但不会升到:

  • 4.18.0

固定版本

"axios": "1.8.0"

表示只安装这个精确版本。


三、什么时候该用哪种版本策略

应用项目

建议偏稳,通常:

  • 使用 lock 文件
  • 版本范围不要过于激进
  • 核心依赖慎重升级

工具库 / 组件库

可以根据兼容策略适当放宽版本范围。

一个简单建议:

场景建议
业务项目保守一些
公共库项目兼容范围可适度放宽
核心基础依赖尽量稳定、谨慎升级

四、npm scripts 是怎么成为项目命令中心的

很多团队真正高频使用 npm 的地方,不是装包,而是 scripts

例如:

{
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "test": "jest",
    "lint": "eslint ."
  }
}

执行方式:

npm run dev
npm run build
npm run test
npm run lint

为什么 scripts 很重要

因为它把各种复杂命令统一收口到 package.json 中。

团队成员不需要记住一长串命令,只需要记住:

npm run xxx

这大大降低了协作成本。


五、scripts 的常见设计方式

一个稍微像样的项目,常见脚本会包括:

{
  "scripts": {
    "dev": "vite",
    "build": "vite build",
    "preview": "vite preview",
    "lint": "eslint src",
    "format": "prettier --write .",
    "test": "vitest"
  }
}

常见分类如下:

脚本名用途
dev本地开发
build生产构建
test测试
lint代码检查
format代码格式化
preview构建产物预览

一个经验

脚本命名尽量统一、可预测。
这样团队一看就知道该用什么命令。


六、npm 生命周期脚本

npm 还支持一些特殊钩子脚本,比如:

  • preinstall
  • postinstall
  • prebuild
  • postbuild
  • prepublishOnly

例如:

{
  "scripts": {
    "prebuild": "echo start build",
    "build": "vite build",
    "postbuild": "echo build done"
  }
}

执行:

npm run build

会自动按顺序执行:

  1. prebuild
  2. build
  3. postbuild

这在自动化流程中非常有用。


七、如何查看、更新依赖

查看当前依赖

npm list --depth=0

查看哪些依赖过期

npm outdated

更新依赖

npm update

更新单个依赖:

npm update lodash

注意

更新依赖前最好确认:

  • 是否有 breaking change
  • 是否影响现有项目
  • 是否需要同步更新配置

不要见红点就一顿升级,很多项目就是这么升级成事故复盘材料的。


八、如何发布自己的 npm 包

这是 npm 进阶能力里的重要一步。

1. 注册 npm 账号

先去 npm 官网注册。

2. 本地登录

npm login

3. 准备 package.json

例如:

{
  "name": "my-utils-demo",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT"
}

4. 发布

npm publish

如果是作用域包,可能需要:

npm publish --access public

5. 升级版本后重新发布

npm version patch
npm publish

还可以:

npm version minor
npm version major

九、包发布前的几个注意事项

1. 包名不能重复

可先检查:

npm view your-package-name

2. 不要把敏感文件发上去

例如:

  • .env
  • 私钥
  • 测试数据
  • 本地配置文件

3. 确认入口文件正确

比如:

"main": "index.js"

4. 善用 .npmignore

可以控制哪些文件不被发布。


十、这一阶段最该掌握的能力

到了“进阶”层,你至少应该会这些:

会看版本

  • 知道 ^~ 的区别
  • 知道如何控制升级风险

会写 scripts

  • 能把常用开发命令统一到 package.json
  • 能设计出清晰的命令体系

会管理依赖

  • 知道怎么查看过期依赖
  • 知道何时更新,何时保守

会发包

  • 能把自己的工具包发布到 npm
  • 知道如何管理版本迭代

总结

npm 的进阶,不是多会几个命令,而是开始具备这些意识:

  • 依赖版本需要治理
  • 项目命令需要统一
  • 包可以被分发和复用

这时 npm 就不再只是“安装工具”,而开始变成你组织项目、组织团队协作的一部分。

下一篇我们进入最后一层:
面向团队协作、CI/CD、安全与最佳实践的 npm 工程化。