angular-cli自定义原理图/集合

时间:2017-09-26 14:50:38

标签: angular angular-cli angular-schematics

我正在尝试为角度cli创建自定义原理图。到目前为止,我已经想通了“集合”必须编译,cli无法读取打字稿。这意味着您不能只是克隆 https://github.com/angular/devkit/tree/master/packages/schematics/angular 更改您需要的内容并在npm上发布,这意味着您需要克隆整个 https://github.com/angular/devkit 并使用其npm run build创建您需要run it thru tsc的编译原理图,然后您可以将这些编译的文件发布到npm并使用npm进行全局安装,例如

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”。

我认为这清楚地表明它确实在使用我的收藏品?

有人设法让自定义收藏品有效吗?全球和生成组件/模块?

2 个答案:

答案 0 :(得分:10)

  

/ usr / local / bin / node_modules / @ thescrollbar / schematics - >的/ usr / local / bin中/ node_modules / @角/ CLI / node_modules / @ thescrollbar /原理图

是的,这是当前实施的问题。那是因为我们(盲目地)在集合名称上调用require.resolve,该集合名称仅从当前模块(即CLI)解析。本周应该发布的修复传入(PR 163)将使用以下列表解决:

  • 是一个相对于process.cwd()的节点包吗?
  • 它是相对于工具的节点包(在您的情况下是CLI)?
  • 是全局安装的节点包吗?

您可能会注意到有两个缺失的后备缺失;它是一个相对于你的原理图的包,它是一个相对于你的项目的包吗?即将到来,实施起来有点复杂。在任何情况下,您都可以全局安装原理图,这样可以正常工作。

  

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);