Angular 6 Schematics 无效源(未定义)

Posted

技术标签:

【中文标题】Angular 6 Schematics 无效源(未定义)【英文标题】:Angular 6 Schematics Invalid Source (undefined) 【发布时间】:2018-11-02 11:55:05 【问题描述】:

我正在创建一些自定义原理图,以帮助我们快速启动 Angular 库项目。鉴于此,我不希望开发人员必须有一个ng ... 命令清单,他们必须运行以启动和运行库,我只想有一个设置工作区的命令,放置一个在其中的库,进行一些自定义(以开玩笑的方式交换业力,添加一些 CI 配置等)。

我这样做的方法是创建一个以空树开头的原理图,然后从@schematics/angular 调用ng-new 原理图,通过externalSchematic() 然后链接来自同一包的library 原理图,然后是用于进行自定义的自定义示意图的数量。

我想要使用externalSchematic() 而不是将所有外部原理图的代码复制到我的原理图项目中的原因是,当@schematics/angular 更新时,我可以通过执行yarn upgrade-interactive 来合并这些更新并找到并通过运行测试套件解决任何问题。最终,我们可以使用 CI 将其自动化。

我在这里创建了一个小型的自包含示例来重现我的错误:https://github.com/matt328/ng-schematics-test

重现步骤:

git clone
npm install
npm run build
schematics ng-schematics-test:my-full-schematic --name=test-schematic

当我运行原理图时,它会报告Invalid source: undefined.

这里

https://github.com/matt328/ng-schematics-test/blob/master/src/my-full-schematic/index.ts#L30

是我使用externalSchematic() 调用ng-new 的地方。

我对源代码进行了一些挖掘,发现它是由一些角度示意图引起的

"$default": 
  "$source": "projectName"

在他们的模式中。该错误是由于 projectName 未定义造成的。

还需要做什么才能使用externalSchema() 调用ng-new?这种方法有效吗,还是有其他方法可以做到这一点?

【问题讨论】:

【参考方案1】:

早在 2 月初,我就可以从这个 demo working 获得 externalSchematics 命令的工作版本。当我今天尝试复制之前的结果时,我收到了与您相同的错误(ng-newcomponentinterface,当我尝试从原理图项目中运行命令时。

但是,当我创建一个新的 Angular 项目并创建一个指向原理图项目的符号链接时,我能够在 Angular 项目中成功生成componentinterfaceng-new 尚未成功,因为 node_modules 映射并不那么简单(它确实提示我输入一些必需的参数,versionname 在引发缺失模块错误之前,我想这可能被解释为作为进展)。

【讨论】:

嘿@ericksoen!能否请您分享新项目中的依赖项?即使使用全新安装的环境,它仍然无法正常工作。谢谢! 这是repo link to a paired down version of my schematic project。它对ng-new 命令进行了一次通过测试。我还验证了如果您创建一个指向项目根目录的符号链接,您可以使用它来使用ng new project-name --collection demo-schematic 初始化新项目【参考方案2】:

这个花了我一段时间:

您似乎必须在真正的 Angular 项目中运行任何扩展 @schematics/angular 示意图的示意图。为此,请执行以下操作:

$ cd <path to an angular project> $ npm link <path to your custom schematics project> $ ng g <schematics-collection-name>:<schematic-name> [params]

这应该可以工作,因为您的扩展 @schematics/angular 原理图现在在 angular 项目中运行并且能够获得正确的源代码。

另请注意:使用$ schematics <collection-name>:<schematics-name> 运行它会导致同样的未定义错误!

希望对你有帮助

【讨论】:

以上是关于Angular 6 Schematics 无效源(未定义)的主要内容,如果未能解决你的问题,请参考以下文章

如何修复“找不到模块'@angular-devkit/schematics'”

在集合“@schematics/angular”中找不到原理图“库”

Angular Schematics 相对路径

如何运行@angular-eslint/schematics:convert-tslint-to-eslint

ClassOptions Schema - Angular Schematics

Angular Material Schematics 生成的代码