自定义角度原理图:未定义管道"dasherize"。在角度项目上运行时



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

src/
  app/
    __name@dasherize__.ts

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

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

i然后将CD cd到Test-App目录中,并链接到我的示例示意图:

npm link ../schematics/sample-schematic

我运行我的原理图:

ng g sample-schematic:sample

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

Pipe "dasherize" is not defined. 

如果我将files目录中的文件名更改为test.ts,则可以正常工作,并且创建了文件。我猜我缺少一些进口来使用我的测试应用项目中的各种原理图功能。我的依赖性和DEV依赖性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",
    ...
  }

请检查。它可能可能对您有所帮助。

确保导入strings

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

然后,将strings传递到模板引擎,如下:

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

无需将功能分配给options。(这是所有的情况,更改options变量不是一个好习惯(。

这样,dasherize功能将在名称和模板代码中可用。

希望它对您有帮助。

我找到了解决方法,但并不令人满意。如果有人有更好的解决方案,我全都是耳朵。

我最终在设置选项/工作区等功能中所做的事情。我添加了一些代码:

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

然后,在模板中,我可以分别访问dashNametheNameName进行虚线,骆驼和Pascalcase。仍然不确定为什么管道在文件名(或模板本身(中不起作用,但这确实可以使事情现在正常工作。

最新更新