10

我正在尝试为 angular cli 创建自定义原理图。到目前为止,我已经发现必须编译“集合”,cli 无法读取打字稿。这意味着您不能只克隆https://github.com/angular/devkit/tree/master/packages/schematics/angular更改您需要的任何内容并将其发布到 npm 上,这意味着您需要克隆整个https:// github.com/angular/devkit并使用它npm run build来创建您需要通过 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”。

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

有人设法让自定义集合正常工作吗?在全球范围内生成组件/模块?

4

2 回答 2

11

/usr/local/bin/node_modules/@thescrollbar/schematics -> /usr/local/bin/node_modules/@angular/cli/node_modules/@thescrollbar/schematics

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

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

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

ng gc --collection=@thescrollbar/schematics 徽标

它使用@schemics/angular 模板创建它,而不是我的集合

这是一个已知问题,我们有一个 PR 可以在 CLI 中修复它。这也是一个即将到来的修复。

感谢您试用 Schematics。现在这是一个很长时间的项目,我们仍在修复许多小的边缘案例。我们还将很快获得更好的文档和教程(包括原理图)。这几乎是一项正在进行的工作,所以感谢您对它的耐心等待。

您可以在 Angular DevKit 存储库 ( https://github.com/angular/devkit ) 中提交问题和错误。

于 2017-09-26T16:22:25.853 回答
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);

于 2017-10-12T14:09:51.370 回答