node.js服务器怎样实现删除回车符及多余的空格并输出?

未加工的源代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>你好</title>
    </head>
    <body>
        <p class="abc">你好</p>
    </body>
</html>

加工后的代码(要实现的是去掉回车符及多余的空格)

<!DOCTYPE html><html><head><meta charset="UTF-8"><title>你好</title></head><body><p class="abc">你好</p></body></html>

服务器上有一个index.html文件,源代码是上面未加工的代码,怎么样通过文件流(createReadStream)及管道(pipe)来实现?
实现的是在浏览器中查看源代码的样式是加工后的代码的样式。

阅读 4k
3 个回答

使用html-minifier

var minify = require('html-minifier').minify;
var result = minify('<p title="blah" id="moo">foo</p>');
console.log(result);

你是想每次请求都压缩么?这样的需求头一次见,对性能损耗很大呀,一般都是压缩再用的。

规范标题

“如何删除 html 中的回车和空白符?”

  • read.html 源文件
  • write.html 加工后的文件

可以先使用createReadStream读取read.html文件的原内容,然后通过第三方html-minifier模块处理(记得使用npm安装),最后再使用writeFileSync写入加工后的文件write.html中:

const {
    createReadStream,
    writeFileSync
} = require('fs');
let data = '';
const readStream = createReadStream('./call.html');
// 需要安装第三方模块html-minifier
const minify = require('html-minifier').minify;
readStream.setEncoding('UTF8');
readStream.on('data', (chunk) => {
    data += chunk;
});
readStream.on('end', (chunk) => {
    // 压缩html
    let result = minify(data, { removeComments: true, collapseWhitespace: true });
    console.log(result);
    // 写入压缩文件
    writeFileSync('./write.html', result);
    console.log("程序执行完毕");
});

实际情况读本地html这种小文件,可以使用readFile来读取而不需要动用流这种方案,类似实现的原理就像webpack的加载器和gulp的插件一样。

如果规定必须在管道中处理可以使用through2模块实现,这种方案需要自己去解析buffer数据格式,类似下面这样:

const fs = require('fs');
const through2 = require('through2');
fs.createReadStream('./read.html')
    .pipe(through2(function (chunk, enc, callback) {
        for (var i = 0; i < chunk.length; i++)
            if (chunk[i] == 97)
                chunk[i] = 122 // 把a替换为z
        this.push(chunk);
        callback();
    }))
    .pipe(fs.createWriteStream('./write.html'));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题