What This Error Means
npm detected that the lockfile or dependency tree verification does not match what it expected.
How to Fix It
- If you have a lockfile, regenerate it intentionally (delete
node_modules, then runnpm install). - Commit the lockfile changes and keep npm versions consistent across dev and CI.
- If this happens only in CI, ensure CI uses the same Node/npm versions as local.
Why It Happens
package-lock.jsonis out of sync withpackage.json(or was manually edited).- Different npm versions generated different lockfile formats and metadata.
- A proxy registry served inconsistent metadata during lockfile generation.
How to Verify
- Run
npm ci(only ifpackage-lock.jsonexists) and confirm verification succeeds. - Run
npm lsand confirm the tree is consistent.
Manual checksum validation
- Confirm lockfile exists and is not malformed:
node -e "JSON.parse(require(\"fs\").readFileSync(\"package-lock.json\",\"utf8\")); console.log(\"ok\")". - Compare npm versions:
node -vandnpm -v(local vs CI).
Common CLI Output
npm ERR! code ELOCKVERIFYnpm ERR! Errors were found in your package-lock.json, run npm install to fix them. How npm verifies package integrity
- npm uses the lockfile to produce a deterministic dependency tree in CI.
- When lockfile metadata is inconsistent or generated by different toolchains, verification can fail.
- Keeping Node/npm versions aligned reduces lockfile drift.
Prevention Tips
- Pin Node/npm versions in CI.
- Avoid manual lockfile edits.
- Use a stable proxy/cache registry to reduce metadata drift.
Where This Can Be Triggered
github.com/npm/cli/blob/417daa72b09c5129e7390cd12743ef31bf3ddb83/lib/commands/ci.js
This is the lockfile verification path used by npm ci. Lockfile/package.json mismatches are detected here and can surface as ELOCKVERIFY in CLI output. - GitHub
// verifies that the packages from the ideal tree will match
// the same versions that are present in the virtual tree (lock file)
// throws a validation error in case of mismatches
const errors = validateLockfile(virtualInventory, arb.idealTree.inventory)
if (errors.length) {
throw this.usageError(
'`npm ci` can only install packages when your package.json and ' +