{"record":{"id":"301799d6e304bdd4","repo":"yarnpkg/yarn","slug":"toomanyarguments","errorCode":null,"errorMessage":"tooManyArguments","messagePattern":"tooManyArguments","errorType":"exception","errorClass":"MessageError","httpStatus":null,"severity":"error","filePath":"src/cli/commands/publish.js","lineNumber":130,"sourceCode":"  try {\n    await config.registries.npm.request(NpmRegistry.escapeName(pkg.name), {\n      registry: pkg && pkg.publishConfig && pkg.publishConfig.registry,\n      method: 'PUT',\n      body: root,\n    });\n  } catch (error) {\n    throw new MessageError(config.reporter.lang('publishFail', error.message));\n  }\n\n  await config.executeLifecycleScript('publish');\n  await config.executeLifecycleScript('postpublish');\n}\n\nexport async function run(config: Config, reporter: Reporter, flags: Object, args: Array<string>): Promise<void> {\n  // validate arguments\n  const dir = args[0] ? path.resolve(config.cwd, args[0]) : config.cwd;\n  if (args.length > 1) {\n    throw new MessageError(reporter.lang('tooManyArguments', 1));\n  }\n  if (!await fs.exists(dir)) {\n    throw new MessageError(reporter.lang('unknownFolderOrTarball'));\n  }\n\n  const stat = await fs.lstat(dir);\n  let publishPath = dir;\n  if (stat.isDirectory()) {\n    config.cwd = path.resolve(dir);\n    publishPath = config.cwd;\n  }\n\n  // validate package fields that are required for publishing\n  // $FlowFixMe\n  const pkg = await config.readRootManifest();\n  if (pkg.private) {\n    throw new MessageError(reporter.lang('publishPrivate'));\n  }","sourceCodeStart":112,"sourceCodeEnd":148,"githubUrl":"https://github.com/yarnpkg/yarn/blob/c2dda503f3759b5be5f0e24ecd9cf5c97a540147/src/cli/commands/publish.js#L112-L148","documentation":"`yarn publish` accepts zero or one positional argument (an optional directory or tarball path, publish.js:128-130). If more than one positional arg is passed it throws tooManyArguments with the max count (1).","triggerScenarios":"Running `yarn publish ./dir extra`, `yarn publish a.tgz b.tgz`, or a wrapper script that appends multiple path arguments.","commonSituations":"Shell glob expanding to multiple tarballs; script passing both a dir and a version flag positionally; misunderstanding the command signature.","solutions":["Pass at most one path: `yarn publish` (uses cwd) or `yarn publish ./pkg-dir` or `yarn publish ./pkg.tgz`.","If you have multiple tarballs, publish them in separate invocations.","Quote arguments and check `\"$@\"` length in wrapper scripts before forwarding."],"exampleFix":"# before\n$ yarn publish ./pkg ./other\n# after\n$ yarn publish ./pkg","handlingStrategy":"validation","validationCode":"function assertPublishArgs(args) {\n  if (args.length > 1) {\n    throw new Error(`yarn publish takes at most 1 positional arg, got ${args.length}.`);\n  }\n}","typeGuard":null,"tryCatchPattern":"try {\n  await runYarn(['publish', ...args]);\n} catch (e) {\n  if (/tooManyArguments/.test(e.message)) {\n    console.error('Pass only one dir/tarball path to yarn publish.');\n    return;\n  }\n  throw e;\n}","preventionTips":["Treat `yarn publish` as 0-or-1 positional args.","Quote globs and check arg counts in wrapper scripts.","Publish multiple tarballs in separate invocations."],"tags":["cli","publish","arguments","validation"],"backgroundTag":null,"analyzedSha":"c2dda503f3759b5be5f0e24ecd9cf5c97a540147","analyzedAt":"2026-08-13T04:17:06.305Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}