pnpm-lock.yaml is a lock file generated by pnpm to ensure dependency version consistency.
Lock File Structure:
yaml# pnpm-lock.yaml lockfileVersion: '6.0' settings: autoInstallPeers: true excludeLinksFromLock: false importers: .: dependencies: lodash: specifier: ^4.17.21 version: 4.17.21 packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LbbZUZt0P2vK6s4I6F7McA==} engines: {node: '>=6'} dev: false snapshots: lodash@4.17.21: {}
Main Sections Analysis:
-
lockfileVersion
- Identifies lock file format version
- pnpm 8 uses version 6.0
-
importers
- Records direct dependencies of each package
- Contains specifier (declared version range) and version (actually installed version)
-
packages
- Metadata of all dependency packages
- Contains resolution address, integrity check, engine requirements, etc.
-
snapshots
- Snapshots of dependency tree
- Records dependency relationships
Lock File Purpose:
bash# Developer A installs dependencies pnpm install # Generates pnpm-lock.yaml # Developer B clones project git clone project pnpm install # Installs based on lock file, ensuring version consistency
Version Control:
bash# Must commit to version control git add pnpm-lock.yaml git commit -m "add lockfile" # Use frozen install in CI/CD pnpm install --frozen-lockfile # Installation fails if lock file doesn't match package.json
Common Issues Handling:
- Update Dependencies
bash# Update single dependency pnpm update lodash # Update all dependencies pnpm update # Update to latest version (ignore version range) pnpm update --latest
- Resolve Conflicts
bash# Delete lock file and regenerate rm pnpm-lock.yaml pnpm install
- Import Other Lock Files
bash# Import from package-lock.json pnpm import # Import from yarn.lock pnpm import
Comparison with npm/yarn Lock Files:
| Feature | pnpm-lock.yaml | package-lock.json | yarn.lock |
|---|---|---|---|
| Format | YAML | JSON | Custom format |
| Readability | High | Medium | Low |
| Storage Method | Flat | Flat | Flat |
| Hard Link Support | ✅ | ❌ | ❌ |
Best Practices:
bash# Always commit lock file git add pnpm-lock.yaml # Use frozen install in CI pnpm install --frozen-lockfile # Update dependencies regularly pnpm update --interactive --latest