3

在为外部角度示意图调用 ng add 时,我需要帮助。(我正在尝试添加 ng-momentum:https ://github.com/BottleRocketStudios/ng-momentum )我正在尝试从自定义 CLI 调用“ng add ng-momentum”,但我遇到了问题找不到模块“ng-momentum”。

我尝试以几种不同的方式从@angular-devkit/schematics 调用 externalSchematic 方法,但缺少一些东西。

我尝试过的一些不同的实现:

return chain([
  externalSchematic('ng-momentum', 'scaffold', { 
   project: options.project,
 })

return chain([
  externalSchematic('ng-momentum', 'ng-add', {
  }),
  externalSchematic('ng-momentum', 'scaffold', {
    spec: false,
    force: true,
  })

return chain([
  externalSchematic('ng', 'add', {
   project: options.project,
   package: 'ng-momentum',
 })

但我总是遇到如下所述的错误

复制步骤
1)运行“npm i @lcu/cli -g”以安装自定义 CLI
2)创建一个新的空文件夹,导航到它
3)运行命令“lcu init”。将范围命名为“@scope”,将工作区命名为“test”
4) 在同一文件夹中,运行命令“lcu proj newProject” 选择“App”。选择“动量”

预期行为:按照 ng-momentum 的步骤,如果我创建一个新的 Angular 项目 (ng new newProject),然后在 CLI 之外运行 ng add (ng add ng-momentum),我会得到一个新的 Angular 项目和 ng-动量应用。

实际行为:我收到以下错误:“无法从“C:\wherever\your\project\is”找到模块“ng-momentum”。

好像我错过了一些东西,但不完全确定是什么。如果需要更多信息,或者有任何问题,请告诉我。

先感谢您!

4

2 回答 2

2

我遇到了同样的问题并找到了解决方案。

问题是要运行ng-momentum:ng-add原理图,您需要在它之前安装包,并ng add为我们安装。

因此,您需要将原理图分为两种情况:安装依赖项和您的实际规则。

查看要求安装包并将您的规则排队的规则。


export functions dependencies(options): Rule: Rule {
    return (_tree: Tree, context: SchematicContext) => {
        const installTaskId = context.addTask(new NodePackageInstallTask({
            packageName: 'ng-momentum'
        }));

        context.addTask(new RunSchematicTask('after-dependencies', options), [installTaskId]);
    }
}

不要害怕,如果你像这样配置你的收藏,你的用户不会看到这个。


{
    "$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
    "schematics": {
        "your-rule": {
            "factory": "./what-ever/index#dependencies",
            "schema": "./what-ever/schema.json"
        },
        "after-dependencies": {
            "factory": "./what-ever/index#yourRule",
            "schema": "./what-ever/schema.json",
            "private": true,
        }
    }
}


于 2020-05-27T00:55:41.723 回答
0

我很难从自定义添加原理图中调用 externalSchematic,实际上,您要从 ng add 调用的库必须本地安装在根 package.json 中。

externalSchematic 调用正在寻找 package.json,除非它安装在根原理图项目中,否则它将无法工作。

我希望它与这个问题有关!

于 2020-03-13T16:37:40.623 回答