我正在运行一个节点脚本,该脚本读取.svg字体文件,将其作为字符串变量传递给Cheerio,对其进行修改并尝试写入磁盘
问题在于,尽管脚本似乎可以运行,但输出文件与输入文件相同,好像没有发生任何修改。
在我看来,我传递给cheerio的原始“ svgFont”变量根本没有被修改。
因此,我需要将修改传回给它,或者将cheerio的输出直接发送到fs写。但是我不知道该怎么办。
const cheerio = require('cheerio');
var fs = require('fs');
// read the svg font
fs.readFile('font.svg', function read(err, data) {
if (err) {
throw err;
}
// convert to string and pass to cheerio
var svgFont = data.toString();
const $ = cheerio.load(svgFont, {
normalizeWhitespace: true,
xmlMode: true
});
// loop all glyph tags
$("glyph").each(function(i,el){
// modify things
});
// Finally write the font with the modified paths
fs.writeFile("outFont.svg", svgFont, function(err) {
if(err) {
throw err;
}
console.log("The file was saved!");
});
});
答案 0 :(得分:0)
您可以使用fs-cheerio包来写入文件。在您的代码中,原始变量没有被修改。解析后的cheerio表示会被修改。
答案 1 :(得分:0)
正确的答案是使用.xml()传递包含所有修改的cheerio对象'$',因为这是我正在读取的.svg文件。例如:
// Finally write the font with the modified paths
fs.writeFile("outFont.svg", $.xml(), function(err) {
if(err) {
throw err;
}
console.log("The file was saved!");
});