Package Versioning

Node projects depend on packages.

Versioning controls which package versions your project can install.

Semantic versioning

Versions usually look like:

major.minor.patch

Example:

4.18.2

Meaning:

Version ranges

{
  "express": "^4.18.2"
}

The caret ^ allows compatible minor and patch updates.

For 4.18.2, it can update within version 4, but not to 5.

package-lock.json

package.json describes allowed versions.

package-lock.json records the exact installed dependency tree.

Commit package-lock.json for applications so teammates and deployments install consistent versions.

dependencies vs devDependencies

dependencies are needed at runtime.

devDependencies are needed for development tools like tests, linters, and build tools.

Interview answer

Node packages usually follow semantic versioning: major, minor, patch. package.json defines dependency ranges, while package-lock.json locks exact installed versions for reproducible installs. Runtime packages go in dependencies, while development tools go in devDependencies.