What is Semantic Versioning?
Semantic Versioning uses the format major.minor.patch:
- MAJOR version for incompatible API changes
- MINOR version for added backward-compatible functionality
- PATCH version for backward-compatible bug fixes
How npm Uses Semantic Versioning
In package.json, dependency ranges control allowed updates:
- Patch-level:
"~1.2.3"or"1.2.x"→ versions≥1.2.3 <1.3.0 - Minor-level:
"^1.2.3"or"1.x"→ versions<2.0.0 - Major-level:
"*"or"x"→ any version
Example:
{
"dependencies": {
"foo": "^2.3.0",
"bar": "~1.4.5"
}
}
^2.3.0 allows 2.3.x, 2.4.x, but not 3.0.0. ~1.4.5 allows only 1.4.x updates.
npm Commands for Bumping Versions
npm version patch # e.g., 1.0.0 → 1.0.1
npm version minor # e.g., 1.0.1 → 1.1.0
npm version major # e.g., 1.1.0 → 2.0.0
npm version prerelease --preid=beta # e.g., 1.2.3 → 1.2.4‑beta.0
npm publish --tag beta # for publishing pre-release versions
This updates package.json, tags the commit, and increments the version appropriately.
Example Workflow
- Start at version
"1.0.0". - Fix a bug →
npm version patch→"1.0.1". - Add a feature →
npm version minor→"1.1.0". - Introduce a breaking change →
npm version major→"2.0.0".
For pre‑releases:
npm version prerelease --preid=beta
# 1.1.0 → 1.1.1‑beta.0
npm publish --tag beta
npm install mypkg@beta
When ready for a stable release:
npm version minor # e.g., 1.1.1‑beta.0 → 1.2.0
npm publish
Quick Reference Table
| Version Bump | Meaning | npm Command |
|---|---|---|
| PATCH | Backward‑compatible bug fix | npm version patch |
| MINOR | Backward‑compatible feature add | npm version minor |
| MAJOR | Backward‑incompatible change | npm version major |
| Prerelease | Beta/alpha testing version | npm version prerelease |
Conclusion
Semantic Versioning turns version numbers into a clear, machine‑readable contract that communicates the scope and impact of changes. By following its structure:
- Consumers gain confidence in safe upgrades,
- Developers enable automation in CI/CD pipelines,
- Teams benefit from predictable release management across projects.
When every component in your ecosystem adheres to MAJOR.MINOR.PATCH, version bumps reflect intentional decisions—not surprise breakages. Use tooling like npm version, commit‑driven conventions, and pre‑release tags to enforce this discipline. The result? A clearer development lifecycle, reliable dependency updates, and smoother collaboration across teams and services.

No comments:
Post a Comment