在节点上用cheerio修改后写入文件

时间:2019-02-06 00:32:23

标签: node.js fs cheerio

我正在运行一个节点脚本,该脚本读取.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!");
        });
});

2 个答案:

答案 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!");
    });