yarnpkg/yarn · error · MessageError
noVersion
Error message
noVersion
What it means
Immediately after the `name` check, `generate-lock-entry.js:23` requires a `version` field (`if (!manifest.version)` → `noVersion`, 'Package doesn't have a version.'). A lockfile entry needs `name@version` to form its pattern, so a missing version is fatal.
Source
Thrown at src/cli/commands/generate-lock-entry.js:23
import {MessageError} from '../../errors.js';
import {implodeEntry, stringify} from '../../lockfile';
export function hasWrapper(commander: Object, args: Array<string>): boolean {
return false;
}
export async function run(config: Config, reporter: Reporter, flags: Object, args: Array<string>): Promise<void> {
let manifest;
if (flags.useManifest) {
manifest = await config.readJson(flags.useManifest);
} else {
manifest = await config.readRootManifest();
}
if (!manifest.name) {
throw new MessageError(reporter.lang('noName'));
}
if (!manifest.version) {
throw new MessageError(reporter.lang('noVersion'));
}
const entry = {
name: manifest.name,
version: manifest.version,
resolved: flags.resolved,
registry: flags.registry || manifest._registry,
optionalDependencies: manifest.optionalDependencies,
dependencies: manifest.dependencies,
};
const pattern = flags.pattern || `${entry.name}@${entry.version}`;
reporter.log(
stringify({
[pattern]: implodeEntry(pattern, entry),
}),
);
}
View on GitHub (pinned to c2dda503f3)
Solutions
- Add a semver `"version"` (e.g. `"1.0.0"`) to package.json.
- If using `--useManifest`, ensure that file declares a version.
- For private apps, still set a version (or avoid `generate-lock-entry`).
Example fix
// before
{ "name": "my-pkg", "dependencies": {} }
// after
{ "name": "my-pkg", "version": "1.0.0", "dependencies": {} } Defensive patterns
Strategy: validation
Validate before calling
import semver from 'semver';
function assertManifestHasVersion(m: { version?: string }): void {
if (!m.version || !semver.valid(m.version)) {
throw new Error('Manifest is missing a valid semver "version"');
}
} Type guard
function manifestHasVersion(m: unknown): m is { version: string } {
return typeof m === 'object' && m !== null && typeof (m as any).version === 'string' && (m as any).version.length > 0;
} Prevention
- Use a package.json JSON-schema check in CI to catch missing required fields.
- For libraries, set version at init and let a release tool (standard-version, semantic-release) bump it.
When it happens
Trigger: `!manifest.version` after the name check — manifest has a name but no (or empty) version.
Common situations: Work-in-progress package.json with a name but version not yet set, or `"version"` removed for a private app that was never meant to publish but is now fed to this command.
Related errors
AI-assisted analysis of yarnpkg/yarn@c2dda503f3 (2026-08-13).
Data as JSON: /api/errors/8ff27844392911f4.
Report an issue: GitHub.