yeoman无法编辑由其他子生成器创建的XML文件

时间:2015-10-22 15:59:31

标签: xml node.js xml-parsing yeoman fs

我试图在一个由另一个子生成器创建的子生成器中对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语句地狱。

1 个答案:

答案 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;
   ...
}

这不是解决问题的最好方法,因为它将文件提交到磁盘后修改文件,而不是在内存编辑器中,但这至少是一个好的起点。