我使用角示意图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);
然后,在模板中,我可以分别访问dashName
,theName
和Name
进行虚线,骆驼和Pascalcase。仍然不确定为什么管道在文件名(或模板本身(中不起作用,但这确实可以使事情现在正常工作。