如何从外部原理图中调用ng add

时间:2019-08-05 20:46:33

标签: angular-cli angular-schematics angular-devkit

在为外部角度示意图调用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的步骤进行操作,如果我创建了一个新的角度项目(ng new newProject),然后在CLI外部运行ng add(ng add ng-momentum),则会得到一个新的角度项目和ng-momentum应用。

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

似乎我缺少了一些东西,但不完全确定是什么。请让我知道是否需要其他信息,或者有任何疑问。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

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

问题在于,要运行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,
        }
    }
}


答案 1 :(得分:0)

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

externalSchematic调用正在寻找package.json,除非将其安装在根逻辑示意图项目中,否则它将无法正常工作。

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