Как направить запросы в clean-css в nodejs?

Я пытаюсь направить вывод запроса в clean-css для минимизации и затем предоставить его в качестве ответа. Пример приложения, о котором идет речь, построен на restify.

Пример кода цели:

var url = "http://www.example.com/css/style.css";
request.get(url).pipe(minify()).pipe(res);

Как я могу определить функцию minify(), чтобы принимать поток и возвращать его. Я пробовал десятки пакетов, ни один не работал. Помощь будет высоко ценится!

1 ответ

Решение

Вы можете создать поток Transform. Он получает код CSS из потока, созданного request.get, делает магию минификации и возвращает минимизированный CSS.

Вот рабочий пример:

const restify = require('restify');
const request = require('request');
const { Transform } = require('stream');
const CleanCSS = require('clean-css');

const server = restify.createServer();
const cleanCss = new CleanCSS();
const url = 'http://www.example.com/css/style.css';

function createMinifyTransform() {
    return new Transform({
        transform(chunk, encoding, callback) {
            const output = cleanCss.minify(chunk.toString());
            this.push(output.styles);
            callback();
        }
    });
}

function respond(req, res) {
    request
        .get(url)
        .pipe(createMinifyTransform())
        .pipe(res);
}

server.get('/', respond);

server.listen(8080, () => console.log('%s listening at %s', server.name, server.url));
Другие вопросы по тегам