我正在创建一些自定义原理图,这将有助于我们快速启动角度库项目。鉴于此,我不希望开发人员必须拥有他们必须运行的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()
,还需要做些什么?这种方法是否有效,还是有其他方法可以做到这一点?
答案 0 :(得分:2)
早在2月初,我就可以从demo working获得externalSchematics
命令的工作版本。当我今天尝试复制以前的结果时,当我尝试从原理图项目中运行命令时,我收到了与您相同的错误(ng-new
,component
和interface
。
但是,当我创建一个新的Angular项目并为原理图项目创建了一个符号链接时,我能够在Angular项目中成功生成component
和interface
。尚未成功使用ng-new
,因为node_modules
映射并非如此简单(它确实提示我输入一些必需参数version
和name
丢失模块错误,我认为这可能被视为进展。)
答案 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>
运行它会导致同样的未定义错误!
希望这有帮助