gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:33:27 25 4
gpt4 key购买 nike

我正在尝试更改一个子生成器中由另一个子生成器创建的 XML 文件。

我的主生成器会进行提示并确定应使用哪些子生成器。简单来说,它看起来像这样:

var MainGenerator = module.exports = yeoman.generators.Base.extend({
writing: function () {
this.composeWith('design:setup', {});
if (this.option.get('someOption')) {
this.composeWith('design:extend', {});
}
}
});

设置生成器添加了一些在设计的每个变体中使用的文件。例如项目config.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' )
);
});

现在,根据用户在提示中选择的设置,执行不同的子生成器。当他们每次向目标添加新文件夹时,都必须在设置生成器创建的 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);
});
});
}
});

fs read 根本没有输出。没有错误,没有什么。你知道我在这里做错了什么吗?

因为扩展生成器有不同的组合,所以我想让每个生成器注册它需要的文件夹,而不是在原始 xml 文件中包含难以维护的 if else 语句。

最佳答案

我还没有找到太多关于文件系统或 composeWith 函数发出的任何事件的文档,但您可以挂接到 end 事件并阅读然后是文件。

this.composeWith('design:extend', {})
.on('end', function () {
console.log(this.fs.read('path/to/file'));
// do your file manipulation here
});

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

关于xml - yeoman 无法编辑由其他子生成器创建的 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33285405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com