【问题标题】:How to pipe requests into clean-css in nodejs?如何将请求通过管道传输到 nodejs 中的 clean-css?
【发布时间】:2018-01-02 04:13:07
【问题描述】:

我正在尝试将请求输出通过管道传输到 clean-css 以缩小,然后将其作为响应提供。有问题的示例应用是基于 restify 构建的。

示例目标代码:

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

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

【问题讨论】:

  • 我正在尝试使用您的代码设置一个正在运行的迷你应用程序。 request 来自哪里?它是github.com/request/request?
  • @PatrickHund 是的,它来自那个请求包。
  • 应用程序被设置为一种反向代理服务器,尽管是定制的。

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


【解决方案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));

【讨论】:

  • 我在上面的代码中遇到的一个问题是对同一文件的后续请求会出现空的 HTTP 200 响应。我想看看可能是什么问题,同时处理整个文件是否会更好,从而提供更好的压缩机会?
  • 哎呀,修复了代码示例。您必须为每个请求创建一个新的缩小转换。
  • 效果很好!
猜你喜欢
  • 1970-01-01
  • 2016-03-17
  • 2016-06-14
  • 2020-04-01
  • 2011-01-03
  • 2012-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多