nodejs/node · error · Error
Package name must be specified either as an argument or in…
Error message
Package name must be specified either as an argument or in package.json file
What it means
Thrown by TrustCommand.flagsToOptions when neither a positional package name nor a package.json `name` field is available. Identical root cause to error 62/63 but reached via the create flow: pkgName = pkgPositional || pkgJsonName, and both are undefined. The guard fires before file/entity checks, so it is the first thing flagsToOptions validates.
Solutions
- Pass the package name as the first positional: `npm trust gitlab @scope/pkg --file ... --project ...`.
- Add a `name` field to the local package.json.
- Run the command from the package root that contains a valid package.json.
Example fix
// before npm trust gitlab --file .gitlab-ci.yml --project g/p --allow-publish // after npm trust gitlab @scope/pkg --file .gitlab-ci.yml --project g/p --allow-publish
Defensive patterns
Strategy: validation
Validate before calling
const pkgName = positionalArg || (await readPkgJsonSafe()).name
if (!pkgName) {
throw new Error('Provide the package name positionally or via package.json#name')
} Type guard
const hasUsableName = (positional, pkg) => Boolean(positional) || Boolean(pkg && pkg.name)
Try / catch
try {
await createConfigCommand(...)
} catch (err) {
if (/Package name must be specified/i.test(err.message)) {
// supply a positional package name and retry
} else { throw err }
} Prevention
- Pass the package name as the first positional when scripting trust creation.
- Ensure package.json in cwd has a `name` field.
- Run from the package's own checkout directory.
When it happens
Trigger: Running `npm trust <provider> --file ... --project ...` from a directory with no package.json (or one missing `name`) and no positional package argument. optionalPkgJson returns {} on read failure.
Common situations: Setting up trust for a package whose checkout isn't present; running from a docs/scripts folder; a scaffolded package.json without a name yet.
Related errors
- Package name must be specified either as an argument or in…
- Package name must be specified either as an argument or in…
- must be specified with option or inferred from the…
- At least one permission flag is required (--allow-publish…
- GitLab CI/CD pipeline file must be just a file not a path
AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13).
Data as JSON: /api/errors/b63e949b1229d316.
Report an issue: GitHub.
Appendix: source
Thrown at deps/npm/lib/trust-cmd.js:273
const usedPkgNameFromPkgJson = !pkgPositional && Boolean(pkgJsonName)
const invalidPkgJsonProviderType = matchPkg && git && git?.type !== name
let entity
let entitySource
if (flags[entityKey]) {
entity = flags[entityKey]
entitySource = 'flag'
} else if (!invalidPkgJsonProviderType && git?.repository) {
entity = git.repository
entitySource = 'package.json'
}
const mismatchPkgJsonRepository = matchPkg && git && entity !== git.repository
const usedRepositoryInPkgJson = entitySource === 'package.json'
const warnings = []
if (!pkgName) {
throw new Error('Package name must be specified either as an argument or in package.json file')
}
if (!flags.file) {
throw new Error(`${providerFile} must be specified with the file option`)
}
if (!flags.file.endsWith('.yml') && !flags.file.endsWith('.yaml')) {
throw new Error(`${providerFile} must end in .yml or .yaml`)
}
this.validateFile?.(flags.file)
if (invalidPkgJsonProviderType) {
const message = this.warnString`Repository in package.json is not a ${providerEntity}`
if (!flags[entityKey]) {
throw new Error(message)
} else {
warnings.push(message)
}View on GitHub (pinned to 1b2de5e052)