2017-09-26 11 views
7

我正在尝试为角度cli创建自定义原理图。到目前为止,我已经知道“集合”必须被编译,cli不能读取打字稿。这意味着你不能只克隆https://github.com/angular/devkit/tree/master/packages/schematics/angular改变任何你需要并将其发布在故宫,这意味着你需要克隆整个https://github.com/angular/devkit,并使用其npm run build创建需要run it thru tsc编译原理图,你就可以发布这些编译的文件,以NPM和全球范围内安装有NPM,例如角度cli自定义原理图/集合

npm i -g @thescrollbar/schematics

那么我应该已经能够做到ng new [email protected]/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 [email protected]/schematics logo

它使用它@schematics/angular模板,而不是我的收藏,尽管事实上,当我故意做创建

ng g shat [email protected]/schematics logo

它说

原理图“虱”不是在集合中没有找到“@ thescrollbar /原理”。

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

任何人设法让自定义集合工作?全球和生成组件/模块?

+1

我加了一些片段和信息https://github.com/angular/angular-cli/issues/7744从我已经能够得到到目前为止工作。 – Splaktar

回答

9

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

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

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

您可能会注意到有两个缺少的回退缺失;它是相对于您的原理图的包吗?它是与您的项目相关的包吗?即将到来,实施起来会稍微复杂一些。无论如何,你可以在全球范围内安装你的原理图,这样可以正常工作。

纳克GC --collection = @ thescrollbar /图表标志

它创建它使用@图表/角模板,而不是我的收藏

这是一个已知的问题,我们有一个公关修复它在CLI中。这也是一个解决方案。

感谢您试用Schematics。现在已经有很长一段时间了,我们仍然在处理很多小边缘案例。我们也将很快提供更好的文档和教程(包括原理图)。这几乎是一项正在进行的工作,所以非常感谢你对它的耐心等待。

您可以在Angular DevKit回购中提出问题和错误(https://github.com/angular/devkit)。

+7

伟大的答案! (由编写原理图的开发人员编写) – Brocco

+0

现在是否全部修复? – foxx

0

甲快速修复CLI 1.4.1是编辑node_modules/@angular/cli/commands/new.js,在运行:功能(commandOptions,rawArgs)改变线

commandOptions.collectionName = this.getCollectionName(rawArgs);

commandOptions.collectionName = commandOptions.collection || this.getCollectionName(rawArgs);