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

Posted

技术标签:

【中文标题】如何从外部原理图中调用 ng add【英文标题】:How to call ng add from an external schematic 【发布时间】:2019-12-13 09:47:42 【问题描述】:

在为外部角度示意图调用 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-momentum 应用程序。

实际行为:我收到以下错误:“Could not find module "ng-momentum" from "C:\wherever\your\project\is"。

我好像遗漏了什么,但不完全确定是什么。如果需要更多信息或有任何问题,请告诉我。

提前谢谢你!

【问题讨论】:

【参考方案1】:

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

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

希望和这个问题有关!

【讨论】:

【参考方案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,
        
    



【讨论】:

以上是关于如何从外部原理图中调用 ng add的主要内容,如果未能解决你的问题,请参考以下文章

如何扩展默认角度原理图“ng生成组件”

cadence 快速通过选择原理图中元件,然后选取对应PCB中元器件 ,怎么操作

cadence 快速通过选择原理图中元件,然后选取对应PCB中元器件 ,怎么操作

在AD10中如何改变原理图中放置的器件的大小,如图,要把电容变小一点!

在资产监控设备研发过程中,如何在AD原理图中屏蔽某部分原理图?

eplan如何同时更改原理图和布局图中的部件