【发布时间】:2014-03-12 14:13:28
【问题描述】:
我正在使用 Express 构建一个 Web 应用程序。我想合并、缩小和提供 .js 文件。我写了一个中间件,这是我的代码:
var fs = require('fs'),
path = require('path'),
uglify = require('uglify-js'),
cache = '',
scriptsDir = path.join(__dirname, '../scripts'),
files = fs.readdirSync(scriptsDir);
// Sync read is not a problem since the following code is executed on startup
files.forEach(function(fname) {
if (/^.*\.js$/.test(fname)) {
cache += fs.readFileSync(path.join(scriptsDir, fname), 'utf8').toString();
}
});
cache = uglify.minify(cache, { fromString: true }).code;
module.exports = function(req, res, next) {
if (req.url === '/js/all.js')
res.end(cache);
else
next();
};
中间件是这样使用的:
app.use(compress());
[...]
app.use(app.router);
app.use(jsMerger); // Here is my middleware
app.use(express.static(path.join(__dirname, '../public')));
问题是响应没有被压缩。此外,响应中有“没有标头”(我的意思是,没有缓存标头,没有 etag;static 中间件提供的其他资源具有这些标头)。这是回应:
X-Powered-By: Express
Transfer-Encoding: chunked
Date: Wed, 12 Mar 2014 14:04:19 GMT
Connection: keep-alive
我错过了什么吗?如何压缩响应?
【问题讨论】:
-
为了进一步参考,
uglify = require('uglify-js')行导入了 uglify.js2 库 (github.com/mishoo/UglifyJS2)
标签: javascript node.js express gzip middleware