Node.js 词条目录
前端Wiki/词条/semver 语义化版本

semver 语义化版本

定义用主版本、次版本、修订号三段数字表达兼容性的版本规范

semver 把版本号拆成三段:主版本表示不兼容的破坏性更新,次版本表示向下兼容的新增功能,修订号表示向下兼容的缺陷修复。依赖区间的写法各有含义:脱字符允许次版本内升级(如 ^1.2.3 可装到 1.9.9),波浪号只允许修订号升级(如 ~1.2.3 到 1.2.9),精确版本号则完全锁死。

发布 npm 包必须遵守这套规范:只要不破坏兼容性,就只升次版本或修订号。npm version 命令可以自动改 package.json 中的版本号并打上对应 git 标签。package.json 的 engines 字段也用它约束 Node 版本,例如写成大于 18 的区间。

JavaScript
const semver = require('semver');

semver.valid('1.2.3');                 // true
semver.gt('1.3.0', '1.2.9');           // true
semver.satisfies('1.4.1', '^1.2.3');   // true(次版本内都兼容)
semver.satisfies('2.0.0', '^1.2.3');   // false(主版本不兼容)

// package.json 中声明依赖区间
// "lodash": "^4.17.21"
// "eslint": "~8.50.0"
// "react": "18.2.0"   精确锁定,不拿任何更新
⚠ 常见误区
🔗 相关词条npm 与 package.json全局对象与 process
← 返回来源章节npm 与 package.json