如何为原理图创建任务?
How can I create a task for schematics?
Angular 原理图有一些 tasks。
我想用脚本执行器创建我自己的 运行 任务。 An example of how angular does this.
目前我只是在原理图的末尾生成预定义的任务。
我可以注册一个执行者,但它不受支持,因为我使用的是私有字段。这是您需要做的:
const host = <NodeModulesEngineHost>(<any>context.engine)._host; // this line is not supported
host.registerTaskExecutor<YourFactoryOptions>({
name: "your-executor-name",
create: (opt) => import('../path/to/executor').then(mod => mod.default(opt))
});
你可以see on Github how to create the task executor registration, and then it is later actually registered here.
我考虑过走这条路,但由于目前不支持添加您自己的任务,我决定只创建一个简单的原理图来包装我想调用的方法并使用 RunSchematicTask
.这解决了我的问题并且感觉更安全了,尽管它确实导致原理图目录中出现了一些样板/混乱。
例如,这是简单的原理图:
export function simpleSchematic(options: any): Rule {
return async () => {
await someAsyncMethod(options);
}
}
下面是我在“父”示意图中调用它的方式:
export function parentSchematic(options: any): Rule {
return chain([
someRuleCreator(options),
(_tree: Tree, context: SchematicContext) => {
context.addTask(new RunSchematicTask('simple-schematic', {})
}
]);
}
请注意,我确实必须将 simple-schematic
条目添加到 collection.json
,但我在上面的示例中没有提供。
Angular 原理图有一些 tasks。 我想用脚本执行器创建我自己的 运行 任务。 An example of how angular does this.
目前我只是在原理图的末尾生成预定义的任务。
我可以注册一个执行者,但它不受支持,因为我使用的是私有字段。这是您需要做的:
const host = <NodeModulesEngineHost>(<any>context.engine)._host; // this line is not supported
host.registerTaskExecutor<YourFactoryOptions>({
name: "your-executor-name",
create: (opt) => import('../path/to/executor').then(mod => mod.default(opt))
});
你可以see on Github how to create the task executor registration, and then it is later actually registered here.
我考虑过走这条路,但由于目前不支持添加您自己的任务,我决定只创建一个简单的原理图来包装我想调用的方法并使用 RunSchematicTask
.这解决了我的问题并且感觉更安全了,尽管它确实导致原理图目录中出现了一些样板/混乱。
例如,这是简单的原理图:
export function simpleSchematic(options: any): Rule {
return async () => {
await someAsyncMethod(options);
}
}
下面是我在“父”示意图中调用它的方式:
export function parentSchematic(options: any): Rule {
return chain([
someRuleCreator(options),
(_tree: Tree, context: SchematicContext) => {
context.addTask(new RunSchematicTask('simple-schematic', {})
}
]);
}
请注意,我确实必须将 simple-schematic
条目添加到 collection.json
,但我在上面的示例中没有提供。