为何我的NX插件生成器尝试调用Angular Devkit Schematics?
问题分析与解决
为什么Angular Devkit会被牵扯进来?
核心原因是你使用的@nrwl/devkit/ngcli-adapter本质是Angular Devkit Schematics和Nx之间的适配层,wrapAngularDevkitSchematic方法的核心逻辑就是调用Angular Devkit的引擎来解析、执行原生Angular schematic。它不是因为其他插件的node_modules引入的,而是@nrwl/devkit/ngcli-adapter本身就依赖@angular-devkit/schematics作为核心依赖。
当你调用这个方法时,适配层会触发Angular Devkit的包解析逻辑,它会尝试读取目标包的package.json中的schematics字段,以此定位schematic集合的配置文件——这就是报错的原因:你的@gb-nx/cli包的package.json里没有这个字段,Angular Devkit判定它不支持schematics。
解决方向
根据你的插件定位,分两种情况处理:
- 如果你的插件不需要提供Angular Devkit风格的schematics:检查调用
wrapAngularDevkitSchematic的代码,确认是否误将@gb-nx/cli作为目标包名传入。这个方法的第二个参数应该是你要适配的第三方Angular插件包名(比如@angular/material这类),而非你自己的插件包。 - 如果你的插件需要支持Angular Devkit schematics:在
@gb-nx/cli的package.json中添加schematics字段,指向你的schematic集合配置文件,示例:
同时确保项目中存在对应的{ "schematics": "./src/schematics/collection.json" }collection.json配置文件,定义你的schematic集合结构。
报错堆栈
Error: Package "@gb-nx/cli" was found but does not support schematics. at NodeModulesEngineHost.resolve (D:\ha\node_modules\@angular-devkit\schematics\tools\node-module-engine-host.js:54:23) at NodeModulesEngineHost._resolveCollectionPath (D:\ha\node_modules\@angular-devkit\schematics\tools\node-module-engine-host.js:81:37) at NodeModulesEngineHost.createCollectionDescription (D:\ha\node_modules\@angular-devkit\schematics\tools\file-system-engine-host-base.js:118:27) at SchematicEngine._createCollectionDescription (D:\ha\node_modules\@angular-devkit\schematics\src\engine\engine.js:162:40) at SchematicEngine.createCollection (D:\ha\node_modules\@angular-devkit\schematics\src\engine\engine.js:155:43) at getCollection (D:\ha\node_modules\nx\src\adapter\ngcli-adapter.js:66:40) at Object.<anonymous> (D:\ha\node_modules\nx\src\adapter\ngcli-adapter.js:545:28) at Generator.next (<anonymous>) at D:\ha\node_modules\tslib\tslib.js:118:75 at new Promise (<anonymous>)
内容的提问来源于stack exchange,提问作者GaryB96
相关产品推荐
相关产品推荐

