Запись в файл после модификации с помощью cheerio на узле - PullRequest
0 голосов
/ 06 февраля 2019

Я запускаю скрипт узла, который читает файл шрифта .svg, передает его как строковую переменную в Cheerio, изменяет его и пытается записать на диск

Проблема заключается в том, что, хотя скрипт работаетвыходной файл идентичен входному файлу, как будто никаких изменений не произошло.

Мне кажется, что исходная переменная "svgFont", которую я передаю cheerio, вообще не изменяется.

Так что мне нужно было бы либо передать обратно изменения или вывести их из cheerio напрямую в fs write.Но я не вижу, как это сделать.

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 голосов
/ 07 февраля 2019

Правильный ответ - передать объект cheerio '$', который содержит все модификации, используя, в данном случае, .xml (), так как это файл .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!");
    });
0 голосов
/ 06 февраля 2019

Вы можете использовать пакет fs-cheerio для записи в файлы.В вашем коде исходная переменная не изменяется.Это измененное представление cheerio, которое модифицируется.

...