parcel-bundler/parcel · error · Error

npmResolve failed: resolving ${name}@${version}

Error message

npmResolve failed: resolving ${name}@${version}

What it means

Thrown by `SimplePackageInstaller._npmResolve` after a successful registry fetch when `semver.maxSatisfying` cannot find any published version matching the requested range. The package exists, but none of its published versions satisfy the requested range (e.g. asking for `^5.0.0` when only `4.x` is published).

Source

Thrown at packages/dev/repl/SimplePackageInstaller/index.js:88

    }
    const data: {|
      name: string,
      modified: string,
      'dist-tags': {|[string]: string|},
      versions: {|[string]: ResolveCacheEntry|},
    |} = await res.json();

    let resolvedVersion;
    if (version in data['dist-tags']) {
      resolvedVersion = data['dist-tags'][version];
    } else if (semver.validRange(version)) {
      // $FlowFixMe
      resolvedVersion = (semver.maxSatisfying(
        Object.keys(data.versions),
        version,
      ): string);
      if (!resolvedVersion) {
        throw new Error(`npmResolve failed: resolving ${name}@${version}`);
      }
    } else {
      throw new Error(
        `${name}@${version}: only npm semver dependencies are currently supported.`,
      );
    }
    this.cache.resolve.set(
      `${name}@${version}`,
      data.versions[resolvedVersion],
    );
    return data.versions[resolvedVersion];
  }

  async _npmFetch(tarball: string): Promise<Map<string, Uint8Array>> {
    const cacheEntry = this.cache.fetch.get(tarball);
    if (cacheEntry) {
      return cacheEntry;
    }

View on GitHub (pinned to 59484858a1)

Solutions

  1. Run `npm view <name> versions` to see what's actually published.
  2. Loosen the range or use a known dist-tag (e.g. `latest`) instead.
  3. Confirm the major you expect has been released; downgrade your request if not.
  4. If a prerelease is required, use an explicit prerelease version, not a caret range.

Example fix

// before
installer._npmResolve('react', '^19.0.0')  // only 18.x published
// after
installer._npmResolve('react', '^18.2.0')
Defensive patterns

Strategy: validation

Validate before calling

const semver = require('semver');
async function rangeIsSatisfiable(name, range) {
  const r = await fetch(`https://registry.npmjs.org/${name}`).then(r => r.json());
  return !!semver.maxSatisfying(Object.keys(r.versions), range);
}

Prevention

When it happens

Trigger: Requesting `name@^5.0.0` when only `4.x` versions exist; requesting a version higher than the latest `dist-tag`; requesting a range that excludes all published versions (`>1.0.0 <1.0.0`); prerelease-only ranges without matching prereleases.

Common situations: Depended on a major that was never released; asked for `next` tag's version explicitly as a range; version pinned ahead of release; package yanked all matching versions.

Related errors


AI-assisted analysis of parcel-bundler/parcel@59484858a1 (2026-08-13). Data as JSON: /api/errors/6d8951b28a95e8ac. Report an issue: GitHub.