如何在nodejs中将请求传递给clean-css?

时间:2018-01-01 11:55:14

标签: css node.js request minify clean-css

我试图将请求输出传递给clean-css以进行缩小,然后将其作为响应提供。有问题的示例应用程序建立在restify之上。

示例目标代码:

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

如何定义minify()函数以接受流并返回一个。我已经尝试了几十个包,没有一个工作。 非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

您可以创建变换流。它从request.get创建的流中获取CSS代码,进行缩小魔术并返回缩小的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));