我正在创建一些自定义原理图,这将帮助我们快速启动 Angular 库项目。鉴于此,我不希望开发人员必须有一个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()
什么?这种方法有效吗,还是有其他方法可以做到这一点?