4

我使用角度原理图 cli 创建了一个简单的新原理图。该示意图将名称作为输入,并在树中生成一个文件。我的files/目录如下所示:

src/
  app/
    __name@dasherize__.ts

我已经构建了它,然后创建了一个新的 Angular 项目:

ng new test-app --routing --style css

然后我 cd 进入 test-app 目录并链接到我的示例示意图:

npm link ../schematics/sample-schematic

然后我运行我的原理图:

ng g sample-schematic:sample

但是,当我这样做时出现以下错误:

Pipe "dasherize" is not defined. 

如果我将files目录中的文件名更改为test.ts它可以正常工作,并创建文件。我猜我缺少一些导入来使用我的测试应用程序项目中的各种原理图功能。我的依赖和开发依赖test-app看起来像:

  "dependencies": {
    "@angular/animations": "~7.2.0",
    "@angular/common": "~7.2.0",
    "@angular/compiler": "~7.2.0",
    "@angular/core": "~7.2.0",
    ...
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.13.0",
    "@angular-devkit/core": "^7.3.9",
    "@angular-devkit/schematics": "^7.3.9",
    "@angular-devkit/schematics-cli": "^0.13.9",
    "@angular/cli": "~7.3.9",
    "@angular/compiler-cli": "~7.2.0",
    "@angular/language-service": "~7.2.0",
    "@schematics/angular": "^7.3.9",
    ...
  }
4

2 回答 2

8

请检查这个。它可能对你有帮助。

一定要导入strings

import { strings } from '@angular-devkit/core';

然后,传递strings给模板引擎,如下所示:

const sourceParametrizedTemplates = apply(sourceTemplates, [
  template({
    ...options,
    ...strings,
  })
]);

无需将功能分配给options. (在所有情况下,更改options变量都不是一个好习惯)。

有了这个,dasherize函数将在名称和模板代码中可用。

希望它会帮助你。

于 2019-06-30T16:37:21.650 回答
1

我找到了一种解决方法,但它并不令人满意。如果有人有更好的解决方案,我会全力以赴。

我最终做了什么——在我设置选项/工作区等的函数中。我添加了一些代码:

options.dashName = dasherize(options.name);
options.theName = camelize(options.name);
options.Name = classify(options.name);

然后在我的模板中,我可以分别访问虚线dashName、 camelCasetheNameNamePascalCase 的 、 和 。仍然不确定为什么管道不能在文件名(或模板本身)中工作,但这确实让事情现在正常工作。

于 2019-05-08T17:08:28.263 回答