嵌套 Angular 添加原理图

Ant*_*ony 0 angular angular-schematics

我有一个项目 Child ,它有一个添加原理图。如果子项目成为父项目的依赖项,而父项目也有添加原理图,那么 ng-cli 将如何处理这个问题?我没有看到任何对ng add级联或调用依赖模式的引用。父级是否需要复制子级原理图,或者有没有办法在父级原理图中手动调用子级原理图?

Ant*_*ony 6

我真的希望文档更好,但解决方案最终是两件事的组合:

首先,您可以像这样调用外部原理图:

externalSchematic('@keysight/alloy', 'ng-add', options)

然而,仅此还不够,因为它无法找到您的包裹。您需要先安装它。这是最终的解决方案:

export function ngAdd(options: any): Rule {
  return (tree: Tree, context: SchematicContext) => {
    console.log('Adding Pathwave Core dependencies...\n');
    dependencies.forEach(dep => addPackageJsonDependency(tree, dep));
    const installTaskId = context.addTask(new NodePackageInstallTask());

    // Chain won't work here since we need the externals to be actually installed before we call their schemas
    // This ensures the externals are a dependency of the node install, so they exist when their schemas run.
    context.addTask(new RunSchematicTask('addExternals', options), [installTaskId]);
  };
}

export function addExternals(options: any): Rule {
  return (_tree: Tree, _context: SchematicContext) => {
    console.log('Running dependency schematics...\n');
    return chain([
      externalSchematic('@keysight/alloy', 'ng-add', options)
    ]);
  };
}
Run Code Online (Sandbox Code Playgroud)

addExternals必须是它自己的原理图collection.json

    "addExternals": {
      "description": "Calls dependency add schemas",
      "private": true,
      "factory": "./ng-add/index#addExternals"
    }
Run Code Online (Sandbox Code Playgroud)