The Front-End
Package Managers
Semver

Understanding Versioning and Semantic Versioning (SemVer)

  1. Semantic Versioning (SemVer) Principles
  2. Managing Package Versions in package.json
  3. Useful Commands

Semantic Versioning (SemVer) Principles:

Semantic Versioning, or SemVer, is a versioning convention that standardizes how version numbers are assigned and incremented in software development. It consists of three numerical segments: MAJOR.MINOR.PATCH. Each segment has a specific meaning:

  1. MAJOR Version:

    • Increments when there are incompatible API changes.
    • Update when you make incompatible API changes in your project.
  2. MINOR Version:

    • Increments for backward-compatible additions.
    • Update when you add functionality in a backward-compatible manner.
  3. PATCH Version:

    • Increments for backward-compatible bug fixes.
    • Update when you make backward-compatible bug fixes.

Additional labels for pre-release and build metadata can be added as needed.

Managing Package Versions in package.json:

Specifying Dependencies:

In your package.json file, dependencies are declared with their version constraints. Examples:

{
  "dependencies": {
    "express": "^4.17.1",
    "lodash": "~4.17.21"
  }
}
  • ^ (Caret): Allows changes that do not modify the left-most non-zero digit. (^4.17.1 allows any version from 4.17.1 to <5.0.0).

  • ~ (Tilde): Allows patch-level changes. (~4.17.21 allows any version from 4.17.21 to <4.18.0).

Specifying Versions in SemVer:

  • Exact Version:

    {
      "dependencies": {
        "package-name": "1.2.3"
      }
    }
  • Range:

    {
      "dependencies": {
        "package-name": ">=1.2.3 <2.0.0"
      }
    }
  • Wildcard:

    {
      "dependencies": {
        "package-name": "*"
      }
    }

Useful Commands:

  • Installing Exact Version:

    npm install package-name@1.2.3
  • Updating to Latest Compatible Version:

    npm update package-name
  • Checking for Outdated Dependencies:

    npm outdated

Understanding Semantic Versioning principles and managing package versions in your package.json file ensures a systematic approach to tracking changes and dependencies in your project. This practice enhances collaboration, reduces compatibility issues, and enables developers to make informed decisions about updating or releasing software.