【问题标题】:Angular 6 Schematics Invalid Source (undefined)Angular 6 Schematics 无效源(未定义)
【发布时间】: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?这种方法有效吗,还是有其他方法可以做到这一点?

【问题讨论】:

    标签: angular angular-schematics


    【解决方案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> 运行它会导致同样的未定义错误!

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 2018-12-15
      • 2019-04-20
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 2019-03-17
      相关资源
      最近更新 更多