What This Error Means
The version or semver range is invalid.
How to Fix It
- Fix the invalid value in
package.json(name/tag/version) and retry. - Retry with
npm --verboseif the error message is truncated.
Why It Happens
- The configured registry does not contain the package/version you requested.
- Auth is missing for a private registry or scoped package.
- The requested version/tag/range is invalid or does not exist.
How to Verify
- Re-run
npm view <pkg>for the same registry and confirm metadata is accessible. - Re-run the original install and confirm the resolution error no longer appears.
Manual dependency inspection
- Check which registry npm is using:
npm config get registry. - If the package is scoped, verify scope registry mapping in
.npmrc(example:@your-scope:registry=...). - Query the registry directly for metadata:
npm view <pkg>@<version> --json.
Common CLI Output
npm ERR! code EINVALIDVERSION How npm resolves dependencies
- npm resolves packages by fetching metadata from the registry, then selecting versions that satisfy semver ranges.
- Private registries and scopes add auth and routing requirements via
.npmrc. - If metadata lookup fails or no version satisfies constraints, npm throws a resolution error.
Prevention Tips
- Keep registry config and auth in
.npmrcunder version control (where appropriate). - Pin versions (or use lockfiles) to avoid unexpected tag/range changes.
- Prefer a proxy/cache registry for CI stability.
Where This Can Be Triggered
github.com/npm/cli/blob/417daa72b09c5129e7390cd12743ef31bf3ddb83/lib/utils/ping.js
This is a registry request path. Many resolution/publish errors happen while fetching or publishing package metadata to the registry. - GitHub
// used by the ping and doctor commands
const npmFetch = require('npm-registry-fetch')
module.exports = async (flatOptions) => {
const res = await npmFetch('/-/ping', { ...flatOptions, cache: false })
return res.json().catch(() => ({}))
}