我试图在一个由另一个子生成器创建的子生成器中对XML文件进行更改。
我的主生成器执行提示并确定应使用哪些子生成器。简化它看起来像这样:
var SetupGenerator = module.exports = yeoman.generators.Base.extend({
default: function () {
// ^ default: makes sure the vsSetup is run before the writing action
// of the other sub generators
this.fs.copy(
this.templatePath( 'project/_config.xml' ),
this.destinationPath( 'project/config.xml' )
);
});
Setup Generator添加了一些在设计的每个变体中使用的文件。例如,项目config.xml
var xml2js = require('xml2js');
var MainGenerator = module.exports = yeoman.generators.Base.extend({
writing: function () {
var xmlParser = new xml2js.Parser();
this.fs.read( 'project/config.xml', function (err, data) {
console.log('read file');
console.dir(err);
console.dir(data);
xmlParser.parseString(data, function (err, result) {
console.log('parsed xml: ' + 'project/config.xml' );
console.dir(result);
console.dir(err);
});
});
}
});
现在,根据用户在提示中选择的设置,将执行不同的子生成器。每当他们向目的地添加一个新文件夹时,都必须在安装程序生成器创建的config.xml中更新。
if else
fs读取根本没有输出。没有错误,没有什么。 我在这里做错了什么想法?
因为有不同的扩展生成器组合,我想让每个生成器注册它需要的文件夹,而不是在原始xml文件中有一个不可维护的puts
语句地狱。
答案 0 :(得分:0)
我还没有找到关于文件系统或end
函数发出的任何事件的大量文档,但您可以挂钩this.composeWith('design:extend', {})
.on('end', function () {
console.log(this.fs.read('path/to/file'));
// do your file manipulation here
});
事件然后读取文件。
public class A{
private Long id;
private String name;
private String anotherinfo;
private String foo;
...
}
这不是解决问题的最好方法,因为它将文件提交到磁盘后修改文件,而不是在内存编辑器中,但这至少是一个好的起点。