искать строку в другом файле и заменять ее другой строкой в узле js

0

Я искал достаточно для этого вопроса и нашел большинство ответов для java той же проблемы, но для меня проблема возникает в узловой js-программе.

Я хочу искать,

.made-easy-theme{
        color:black;
    }

в css файле и заменить его "черным" другим цветом, который я получаю с клиентской стороны программы. Вот что я пробовал, я пробовал 3 пути, но никто из них не работает. Первая концепция, которую я пробовал,

var main = 'temp/' + userId + '/templates/' + appId + '/css/main.css';

 var color = req.body.color;
 function replaceThemecolor(color) {

        fs.readFile(main, 'utf-8',
            function (err, data) {
                if (err) {
                    return console.log(err)
                }
                else {
                    var str = '.made-easy-theme{color:black;}';
                    if (str.search("black") != -1) {

                        var result = data.replace(/black/g, themecolor.color);

                        fs.writeFile(mainCss, result, 'utf-8', function (err) {
                            if (err) return console.log(err);
                        });
                    }
                        console.log(result);
                    }

                });    
    }
});

Вторая концепция, которую я пробовал,

 fs.readFile(main, 'utf-8',
            function (err, data) {
                if (err) {
                    return console.log(err)
                }
                else { 
                var ex = '.made-easy-theme{color:black;}'.includes('black');

                if (ex == true) {
                    var result = data.replace(/black/g, color);

                    fs.writeFile(main, result, 'utf-8', function (err) {
                        if (err) return console.log(err);
                    });
                    console.log(result);
                }


            }

Третья концепция, которую я пробовал,

else if (data.indexOf('.made-easy-theme{color:black;}') > 0) {
                    console.log(data);

                    var result = data.replace('black', themecolor.color);

                    fs.writeFile(mainCss, result, 'utf-8', function (err) {
                        if (err) return console.log(err);
                    });
                };

Никто из них не работает для меня, пожалуйста, помогите решить эту проблему.

  • 0
    На мой взгляд, манипулирование файлом CSS напрямую довольно неуклюже. Я бы предпочел записать правило в пользовательский файл CSS и загрузить его позже, чтобы переопределить правила, которые появляются раньше. Я не знаю, есть ли лучший способ сделать это, хотя.
  • 0
    Должен быть способ сделать это так, как я упоминал выше, по моему мнению, в моем коде есть какая-то ошибка, о которой я не могу сообщить
Показать ещё 1 комментарий
Теги:
replace

2 ответа

0

Вот способ сделать это, хотя и не самый лучший способ. Этот код связан, плохо использует конкатенацию строк, не делает достаточной проверки ошибок и, вероятно, должен использовать поток файлов. Но это даст вам представление.

Кроме того, это просто опасная вещь.

var fs = require('fs');
var infile = 'test.css';
var outfile = 'temp.css';
var flag = false;
var color = 'green';
var out = '';

fs.open(infile, 'r', function(err, fd){
    changeLine(fd);
});


function changeLine(fd){
    var buf = new Buffer(1024);
    buf.fill(0);

    fs.read(fd, buf, 0, 1024, null, function(err, bytesRead, buffer){
        if(bytesRead === 0){
            writeCSS(out);
            return;
        }
        var str = buffer.toString('utf8', 0, bytesRead);
        if(/made-easy-theme/.exec(str)){
            flag = true;
        }
        if (/color:/.exec(str) && flag){
            str = str.replace('black', color);
            flag = false;
        }
        out += str;
        changeLine(fd);
    });    
}

function writeCSS(str){
    fs.writeFile(outfile, str, function(err, written, buffer){
        fs.rename(outfile, infile);
    }); 
}
0

Я нашел ответ

function replaceThemecolor(color) {

        fs.readFile(main, 'utf-8',
            function (err, data) {
                var searchStr = ".made-easy-theme{color:black}";

                    var result = searchStr.replace(new RegExp('black', ''), color);
                    fs.writeFile(main, result, 'utf-8', function (err) {

                        if (err) return console.log(err);
                    });
            });

    }

но проблема в том, что он очищает полный контент файла css и заменяет только

.made-easy-theme{
        color:black;
    }

другой контент, который был в файле css, удаляется. Я хочу сохранить их и заменить то, что хочу заменить

Ещё вопросы

Сообщество Overcoder
Наверх
Меню