Angular 6 Schematics无效源(未定义)

时间:2018-05-23 13:07:58

标签: angular angular-schematics

我正在创建一些自定义原理图,这将有助于我们快速启动角度库项目。鉴于此,我不希望开发人员必须拥有他们必须运行的ng ...命令清单才能启动并运行库,我只想设置一个命令建立一个工作区,在其中放置一个库,进行一些自定义(交换为业力,添加一些CI配置等)。

我这样做的方法是创建一个以空树开头的原理图,然后通过ng-new@schematics/angular调用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未定义的结果。

为了能够使用ng-new致电externalSchema(),还需要做些什么?这种方法是否有效,还是有其他方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

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

但是,当我创建一个新的Angular项目并为原理图项目创建了一个符号链接时,我能够在Angular项目中成功生成componentinterface。尚未成功使用ng-new,因为node_modules映射并非如此简单(它确实提示我输入一些必需参数versionname丢失模块错误,我认为这可能被视为进展。)

答案 1 :(得分:1)

这个花了我一段时间:

您似乎必须运行在真实角度项目中扩展@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原理图现在在一个角度项目中运行,并且能够获得正确的源。

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

希望这有帮助