我试图使用Angular Schematics创建一个带有功能的服务文件。
创建服务文件是可以的。 但是,我无法将虚拟树链接到写入创建服务的下一个规则。
这是代码:
function createService(options: any, name: string): Rule {
return (tree: Tree) => {
const templateSource = apply(url('./files'), [
options.spec ? noop() : filter(path => !path.endsWith('.spec.ts')),
template({
...strings,
'if-flat': (s: string) => options.flat ? '' : s,
...{ name: 'test' },
}),
move('myService.ts'),
]);
return mergeWith(templateSource);
};
}
function addFunction(filePath: string): Rule {
return (tree: Tree) => {
const content = tree.read(filePath);
console.log('content : ', content);
if (!content) {
console.log('content is null');
}
tree.overwrite(filePath, '/* TEST */' + content);
};
}
export default function (options: any): Rule {
return (host: Tree) => {
return chain([
createService(options, 'myService'),
addFunction(options, 'myService')
]);
};
}
content在addFunction函数中始终为null,因此/ * TEST * /永远不会添加到文件中。 我以为createService中的mergeWith会写入虚拟树,并且我可以获取文件并将其写入其中……实际上,filePath存在于虚拟树中,但为空。
我有一种解决方案,可以使用相同的示意图写入以前创建的文件,请告诉我:)