nodejs/node · error · Error

Package name must be specified either as an argument or in p

Error message

Package name must be specified either as an argument or in package.json file

What it means

Thrown by the CircleCI trust provider's `flagsToOptions` when neither a positional argument nor a `package.json` `name` field yields a package name. The trust record needs a package name to bind the OIDC claim to, and it must come from one of those two sources.

Source

Thrown at deps/npm/lib/commands/trust/circleci.js:118

      ...(body.id) && { id: body.id },
      ...(body.type) && { type: body.type },
      ...(body.claims?.['oidc.circleci.com/org-id']) && { orgId: body.claims['oidc.circleci.com/org-id'] },
      ...(body.claims?.['oidc.circleci.com/project-id']) && { projectId: body.claims['oidc.circleci.com/project-id'] },
      ...(body.claims?.['oidc.circleci.com/pipeline-definition-id']) && {
        pipelineDefinitionId: body.claims['oidc.circleci.com/pipeline-definition-id'],
      },
      ...(body.claims?.['oidc.circleci.com/vcs-origin']) && { vcsOrigin: body.claims['oidc.circleci.com/vcs-origin'] },
      ...(body.claims?.['oidc.circleci.com/context-ids']) && { contextIds: body.claims['oidc.circleci.com/context-ids'] },
    }
  }

  // Override flagsToOptions since CircleCI doesn't use file/entity pattern
  async flagsToOptions ({ positionalArgs, flags }) {
    const content = await this.optionalPkgJson()
    const pkgName = positionalArgs[0] || content.name

    if (!pkgName) {
      throw new Error('Package name must be specified either as an argument or in package.json file')
    }

    const orgId = flags['org-id']
    const projectId = flags['project-id']
    const pipelineDefinitionId = flags['pipeline-definition-id']
    const vcsOrigin = flags['vcs-origin']
    const contextIds = flags['context-id']

    // Validate required flags
    if (!orgId) {
      throw new Error('org-id is required')
    }
    if (!projectId) {
      throw new Error('project-id is required')
    }
    if (!pipelineDefinitionId) {
      throw new Error('pipeline-definition-id is required')
    }

View on GitHub (pinned to 1b2de5e052)

Solutions

  1. Pass the package name as the first positional argument to the command.
  2. Add a `"name"` field to the local package.json.
  3. Run the command from the package root that contains a valid package.json.

Example fix

// before
npm trust circleci --org-id ...   // no name, no package.json
// after
npm trust circleci @myscope/mypkg --org-id ...
// or add to package.json: "name": "@myscope/mypkg"
Defensive patterns

Strategy: validation

Validate before calling

function resolvePkgName(positionalArg, pkgJson) {
  const name = positionalArg || pkgJson?.name
  if (!name) {
    throw new Error('Package name required: pass it positionally or set "name" in package.json')
  }
  return name
}

Prevention

When it happens

Trigger: `positionalArgs[0]` is falsy and `optionalPkgJson().name` is also falsy/undefined.

Common situations: Running the command in a directory without a package.json (or with one lacking a `name`); running outside any package and not passing the name positionally.

Related errors


AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13). Data as JSON: /api/errors/6733fa549f409302. Report an issue: GitHub.