自定义角度示意图:未定义管道“dasherize”。在 angular 项目上运行时

Mar*_*rkD 3 angular angular-schematics

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

src/
  app/
    __name@dasherize__.ts
Run Code Online (Sandbox Code Playgroud)

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

ng new test-app --routing --style css
Run Code Online (Sandbox Code Playgroud)

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

npm link ../schematics/sample-schematic
Run Code Online (Sandbox Code Playgroud)

然后我运行我的原理图:

ng g sample-schematic:sample
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我收到以下错误:

Pipe "dasherize" is not defined. 
Run Code Online (Sandbox Code Playgroud)

如果我将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",
    ...
  }
Run Code Online (Sandbox Code Playgroud)

Thi*_*lvo 5

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

一定要导入 strings

import { strings } from '@angular-devkit/core';
Run Code Online (Sandbox Code Playgroud)

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

const sourceParametrizedTemplates = apply(sourceTemplates, [
  template({
    ...options,
    ...strings,
  })
]);
Run Code Online (Sandbox Code Playgroud)

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

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

希望它会帮助你。