{"record":{"id":"ffd2a7fb56059011","repo":"denoland/deno","slug":"missing-name-field-in-add-a-package-name-l","errorCode":null,"errorMessage":"Missing 'name' field in '{}'. Add a package name like:\n  {\n    \"name\": \"@scope/package-name\",\n    ...\n  }","messagePattern":"Missing 'name' field in '(.+?)'\\. Add a package name like:\n  (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/tools/pack/mod.rs","lineNumber":66,"sourceCode":"\n  // Check if git repository is clean (unless --allow-dirty)\n  if !pack_flags.allow_dirty\n    && let Some(dirty) =\n      crate::util::git::check_if_git_repo_dirty(cli_options.initial_cwd()).await\n  {\n    bail!(\n      \"Git repository has uncommitted changes. Use --allow-dirty to pack anyway.\\n{}\",\n      dirty\n    );\n  }\n\n  // Get package configs\n  let mut packages = cli_options.start_dir.jsr_packages_for_publish();\n  if packages.is_empty() {\n    match cli_options.start_dir.member_deno_json() {\n      Some(deno_json) => {\n        let Some(name) = deno_json.json.name.clone() else {\n          bail!(\n            \"Missing 'name' field in '{}'. Add a package name like:\\n  {{\\n    \\\"name\\\": \\\"@scope/package-name\\\",\\n    ...\\n  }}\",\n            deno_json.specifier\n          );\n        };\n        if deno_json.json.version.is_none() {\n          bail!(\n            \"Missing 'version' field in '{}'. Add a version like:\\n  {{\\n    \\\"version\\\": \\\"1.0.0\\\",\\n    ...\\n  }}\",\n            deno_json.specifier\n          );\n        }\n        if deno_json.json.exports.is_none() {\n          bail!(\n            \"Missing 'exports' field in '{}'. Add an exports field like:\\n  {{\\n    \\\"exports\\\": \\\"./mod.ts\\\",\\n    ...\\n  }}\",\n            deno_json.specifier\n          );\n        }\n\n        packages.push(JsrPackageConfig {","sourceCodeStart":48,"sourceCodeEnd":84,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/cli/tools/pack/mod.rs#L48-L84","documentation":"`deno pack` requires the current directory's deno.json to declare a `name` because it packs exactly one JSR-style package when no workspace members are found. Without a name the package cannot be identified on JSR. The error shows the config file's specifier and a `@scope/package-name` example.","triggerScenarios":"Running `deno pack` in a standalone directory whose deno.json has no `\"name\"` field and where `jsr_packages_for_publish()` returned no workspace packages.","commonSituations":"A new module bootstrapped with `deno init` (its default deno.json has no name); converting an existing script folder into a publishable package without filling in package metadata.","solutions":["Add `\"name\": \"@scope/package-name\"` to deno.json.","If this directory is part of a workspace, run `deno pack` from the member directory that owns the package config, or make the deno.json a workspace member with a name.","Verify you are in the intended directory (`pwd`) — the check uses the CLI's start dir."],"exampleFix":"// deno.json (before)\n{\n  \"exports\": \"./mod.ts\"\n}\n// deno.json (after)\n{\n  \"name\": \"@scope/package-name\",\n  \"exports\": \"./mod.ts\"\n}","handlingStrategy":"validation","validationCode":"// Check required pack fields before invoking deno pack\nimport { readFileSync } from \"node:fs\";\nconst cfg = JSON.parse(readFileSync(\"deno.json\", \"utf8\"));\nif (!cfg.name) {\n  console.error(\"deno.json is missing required field: name\");\n  process.exit(1);\n}","typeGuard":"const hasName = (cfg: unknown): boolean =>\n  typeof cfg === \"object\" && cfg !== null && \"name\" in cfg && typeof (cfg as any).name === \"string\";","tryCatchPattern":null,"preventionTips":["Use a package template that includes name/version/exports from the start.","Validate deno.json in CI (deno publish --dry-run) before packing.","Keep required manifest fields in a checklist when scaffolding packages."],"tags":["pack","deno-json","package"],"backgroundTag":"package-manifest-field-missing","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-08-31T04:17:50.494Z"}