我正在尝试为角度cli创建自定义原理图。到目前为止,我已经想通了“集合”必须编译,cli无法读取打字稿。这意味着您不能只是克隆 https://github.com/angular/devkit/tree/master/packages/schematics/angular 更改您需要的内容并在npm上发布,这意味着您需要克隆整个 https://github.com/angular/devkit 并使用其,然后您可以将这些编译的文件发布到npm并使用npm进行全局安装,例如npm run build
创建您需要run it thru tsc的编译原理图
npm i -g @thescrollbar/schematics
然后我应该能够ng new --collection=@thescrollbar/schematics my-app
,但令人惊讶的是,它没有用,并且正在抛出tree.branch is not a function
。
但是如果将这个全局安装的软件包复制到cli的模块
/usr/local/bin/node_modules/@thescrollbar/schematics
- > /usr/local/bin/node_modules/@angular/cli/node_modules/@thescrollbar/schematics
它开始工作,您可以创建一个基于您的原理图的新应用程序..
现在,对于新问题,当我尝试使用
生成新组件时,我没有解决方法 ng g c --collection=@thescrollbar/schematics logo
它使用@schematics/angular
模板创建它,而不是我的集合,尽管事实上当我故意这样做
ng g shat --collection=@thescrollbar/schematics logo
它说
在集合“@ thescrollbar / schematics”中找不到原理图“shat”。
我认为这清楚地表明它确实在使用我的收藏品?
有人设法让自定义收藏品有效吗?全球和生成组件/模块?
答案 0 :(得分:10)
/ usr / local / bin / node_modules / @ thescrollbar / schematics - >的/ usr / local / bin中/ node_modules / @角/ CLI / node_modules / @ thescrollbar /原理图
是的,这是当前实施的问题。那是因为我们(盲目地)在集合名称上调用require.resolve
,该集合名称仅从当前模块(即CLI)解析。本周应该发布的修复传入(PR 163)将使用以下列表解决:
您可能会注意到有两个缺失的后备缺失;它是一个相对于你的原理图的包,它是一个相对于你的项目的包吗?即将到来,实施起来有点复杂。在任何情况下,您都可以全局安装原理图,这样可以正常工作。
ng g c --collection = @ thescrollbar / schematics logo
它使用@ schematics / angular模板创建它,而不是我的集合
这是一个已知问题,我们有一个PR在CLI中修复它。这是一个即将到来的解决方案。
感谢您试用Schematics。这是一个很长时间的项目,我们仍然在修复很多小问题。我们很快就会有更好的文档和教程(包括原理图原理图)。这几乎是一项正在进行中的工作,所以非常感谢您对此非常耐心。
您可以在Angular DevKit仓库(https://github.com/angular/devkit)中提交问题和错误。
答案 1 :(得分:0)
快速修复cli 1.4.1是编辑node_modules/@angular/cli/commands/new.js,在run:function(commandOptions,rawArgs)中更改行
commandOptions.collectionName = this.getCollectionName(rawArgs);
到
commandOptions.collectionName = commandOptions.collection || this.getCollectionName(rawArgs);