{"record":{"id":"66ac9541e455fef6","repo":"denoland/deno","slug":"missing-name-field-in-config-file","errorCode":null,"errorMessage":"Missing 'name' field in config file.","messagePattern":"Missing 'name' field in config file\\.","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/args/mod.rs","lineNumber":1691,"sourceCode":"      deno_path_util::resolve_url_or_path(import_map_path, current_dir)\n        .map_err(|source| ImportMapSpecifierResolveError { source })?;\n    Ok(Some(specifier))\n  } else {\n    Ok(None)\n  }\n}\n\n/// Resolves the no_prompt value based on the cli flags and environment.\npub fn resolve_no_prompt(flags: &PermissionFlags) -> bool {\n  flags.no_prompt || has_flag_env_var(&CliSys::default(), \"DENO_NO_PROMPT\")\n}\n\npub fn config_to_deno_graph_workspace_member(\n  config: &ConfigFile,\n) -> Result<deno_graph::WorkspaceMember, AnyError> {\n  let name: StackString = match &config.json.name {\n    Some(name) => name.as_str().into(),\n    None => bail!(\"Missing 'name' field in config file.\"),\n  };\n  let version = match &config.json.version {\n    Some(version) => {\n      Some(deno_semver::Version::parse_standard(version).with_context(\n        || format!(\"Invalid 'version' field in '{}'\", config.specifier),\n      )?)\n    }\n    None => None,\n  };\n  Ok(deno_graph::WorkspaceMember {\n    base: config.specifier.join(\"./\").unwrap(),\n    name,\n    version,\n    exports: config.to_exports_config()?.into_map(),\n  })\n}\n\npub fn get_default_v8_flags() -> Vec<String> {","sourceCodeStart":1673,"sourceCodeEnd":1709,"githubUrl":"https://github.com/denoland/deno/blob/9ad36f7a2cce60488e6ec52283efb32efddaf93a/cli/args/mod.rs#L1673-L1709","documentation":"When Deno converts a workspace member's config file into a deno_graph WorkspaceMember, it requires a top-level \"name\" string. A member's deno.json without a name field bails with this message; a \"version\", if present, must additionally parse as a standard semver string.","triggerScenarios":"A workspace whose root config lists members under \"workspace\", and one of the member deno.json files lacks the \"name\" field when workspace resolution walks it.","commonSituations":"Adding packages to a deno workspace and forgetting name; authors assuming package.json-style tooling makes name optional; JSONC edits that accidentally remove the field.","solutions":["Add a top-level \"name\": \"your-package\" to the member's deno.json","If a \"version\" is present, make it a valid standard semver string","Check every member listed under \"workspace\" in the root config - the fault may be in any of them"],"exampleFix":"// before (member deno.json)\n{ \"version\": \"1.0.0\", \"exports\": \"./mod.ts\" }\n\n// after\n{ \"name\": \"@scope/pkg\", \"version\": \"1.0.0\", \"exports\": \"./mod.ts\" }","handlingStrategy":"validation","validationCode":"// Validate all workspace members before running publish/build\nconst root = JSON.parse(await Deno.readTextFile(\"deno.json\"));\nfor (const member of root.workspace ?? []) {\n  const cfg = JSON.parse(await Deno.readTextFile(new URL(member, \"file://\" + Deno.cwd() + \"/\").href));\n  if (typeof cfg.name !== \"string\" || cfg.name.length === 0) {\n    throw new Error(`${member}/deno.json is missing a top-level \"name\" field`);\n  }\n}","typeGuard":"const isNamedConfig = (cfg: unknown): cfg is { name: string } =>\n  typeof (cfg as { name?: unknown })?.name === \"string\" && (cfg as { name: string }).name.length > 0;","tryCatchPattern":null,"preventionTips":["Require a name field in every member deno.json when scaffolding workspace packages","Run `deno publish --dry-run` in CI to catch workspace validation errors early"],"tags":["workspace","deno-json","config-file","packaging"],"backgroundTag":"missing-config-field","analyzedSha":"9ad36f7a2cce60488e6ec52283efb32efddaf93a","analyzedAt":"2026-08-20T13:07:44.778Z","contentChangedAt":"2026-08-20T13:07:44.778Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}