{"record":{"id":"424b6105c48e5751","repo":"angular/angular-cli","slug":"no-builder-name-specified","errorCode":null,"errorMessage":"No builder name specified.","messagePattern":"No builder name specified\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/angular_devkit/architect/node/node-modules-architect-host.ts","lineNumber":148,"sourceCode":"   * clause. This should throw if no builder can be found. The dynamic import will throw if\n   * it is unsupported.\n   * @param builderStr The name of the builder to be used.\n   * @returns All the info needed for the builder itself.\n   */\n  resolveBuilder(\n    builderStr: string,\n    basePath: string = this._root,\n    seenBuilders?: Set<string>,\n  ): Promise<NodeModulesBuilderInfo> {\n    if (seenBuilders?.has(builderStr)) {\n      throw new Error(\n        'Circular builder alias references detected: ' + [...seenBuilders, builderStr],\n      );\n    }\n\n    const [packageName, builderName] = builderStr.split(':', 2);\n    if (!builderName) {\n      throw new Error('No builder name specified.');\n    }\n\n    // Resolve and load the builders manifest from the package's `builders` field, if present\n    const packageJsonPath = localRequire.resolve(packageName + '/package.json', {\n      paths: [basePath],\n    });\n\n    const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8')) as { builders?: string };\n    const buildersManifestRawPath = packageJson['builders'];\n    if (!buildersManifestRawPath) {\n      throw new Error(`Package ${JSON.stringify(packageName)} has no builders defined.`);\n    }\n\n    let buildersManifestPath = path.normalize(buildersManifestRawPath);\n    if (path.isAbsolute(buildersManifestRawPath) || buildersManifestRawPath.startsWith('..')) {\n      throw new Error(\n        `Package \"${packageName}\" has an invalid builders manifest path: \"${buildersManifestRawPath}\"`,\n      );","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/angular/angular-cli/blob/bb72145f9ab45aee29f523236b3a25cd0813a841/packages/angular_devkit/architect/node/node-modules-architect-host.ts#L130-L166","documentation":"Builder identifiers must have the form 'package:builder'. resolveBuilder splits the string on ':' and throws when there is no builder name part after the colon.","triggerScenarios":"Passing a builder string like 'my-package' (no ':builderName' suffix) to resolveBuilder or setting an angular.json target's 'builder' field to a bare package name.","commonSituations":"Incomplete migration of angular.json after changing a builder; assuming builder name is optional; copy-paste dropping the ':build' part of '@angular-devkit/build-angular:browser'.","solutions":["Set the full 'package:builder' identifier in angular.json's builder field, e.g. '@angular-devkit/build-angular:application'.","Add the missing ':builderName' to the string passed to resolveBuilder."],"exampleFix":"// before (angular.json)\n\"builder\": \"@angular-devkit/build-angular\"\n// after\n\"builder\": \"@angular-devkit/build-angular:browser\"","handlingStrategy":"validation","validationCode":"if (!/^[^:]+:[^:]+$/.test(builderStr)) throw new Error(`Builder \"${builderStr}\" must be in 'package:builder' format.`);","typeGuard":"const isValidBuilderId = (s) => typeof s === 'string' && /^[^:]+:[^:]+$/.test(s);","tryCatchPattern":"try { await host.resolveBuilder(builderStr); } catch (e) { if (e.message === 'No builder name specified.') { /* correct the builder identifier to include ':builderName' */ } else throw e; }","preventionTips":["Always use fully-qualified 'package:builder' identifiers in angular.json.","Use editor autocomplete/validation for the builder field.","Add a JSON schema check for angular.json in CI."],"tags":["angular","builder","configuration"],"backgroundTag":"invalid-builder-identifier","analyzedSha":"bb72145f9ab45aee29f523236b3a25cd0813a841","analyzedAt":"2026-08-30T02:47:34.745Z","schemaVersion":2},"datasetVersion":"2026-08-30T08:17:16.595Z"}