Nodejs中ejs有办法压缩html吗,比如说去掉生成的空行、空格之类的?

Nodejs中ejs有办法压缩html吗,比如说去掉生成的空行、空格之类的?

12 回复

Node.js 中 EJS 有办法压缩 HTML 吗?比如去掉生成的空行、空格之类的?

在 Node.js 中使用 EJS 模板引擎时,有时我们希望生成的 HTML 文件能够尽可能地压缩,以减少文件大小并提高加载速度。EJS 本身并不提供直接的内置功能来压缩 HTML,但我们可以借助一些额外的库或自定义逻辑来实现这一目标。

方法一:使用 html-minifier

html-minifier 是一个非常强大的工具,可以用来压缩 HTML。我们可以先使用 EJS 渲染模板,然后再通过 html-minifier 来压缩 HTML。

  1. 首先安装 html-minifier
npm install html-minifier
  1. 使用 html-minifier 压缩 HTML:
const ejs = require('ejs');
const fs = require('fs');
const minify = require('html-minifier').minify;

// 渲染 EJS 模板
ejs.renderFile('template.ejs', { /* 数据 */ }, {}, (err, str) => {
  if (err) {
    console.error(err);
    return;
  }

  // 压缩 HTML
  const minifiedHtml = minify(str, {
    collapseWhitespace: true,
    removeComments: true,
    removeEmptyAttributes: true
  });

  // 输出压缩后的 HTML
  fs.writeFileSync('output.html', minifiedHtml);
});

方法二:自定义压缩逻辑

如果你不想引入额外的库,也可以编写简单的逻辑来手动移除多余的空格和换行符。

const ejs = require('ejs');
const fs = require('fs');

// 渲染 EJS 模板
ejs.renderFile('template.ejs', { /* 数据 */ }, {}, (err, str) => {
  if (err) {
    console.error(err);
    return;
  }

  // 自定义压缩逻辑
  const compressedHtml = str.replace(/\s+/g, ' ').trim();

  // 输出压缩后的 HTML
  fs.writeFileSync('output.html', compressedHtml);
});

这种方法虽然简单,但可能不如 html-minifier 强大和灵活。它只是简单地移除了多余的空白字符和换行符。

总结

虽然 EJS 本身没有提供直接压缩 HTML 的功能,但我们可以通过使用外部库(如 html-minifier)或者编写简单的自定义逻辑来实现这一目标。根据你的需求选择合适的方法。


liteview 可以,哈哈哈 npm install liteview

看出来了liteview是你的作品,打算试一把,这个能兼容ejs不?另外json.shen@gmail.com是我的邮箱,请给个NAE码。呵呵

去掉空格神马的,直接写一个函数不就搞定了么?!?!

大概是什么样的一个函数?

哈哈,搞定 。这样来一下根本就没ejs什么事了,通吃。。。

app.use(function(req, res, next){
    var send = res.send;
    res.send = function(body){
      if('string' == typeof body)
        body = body.replace(/\n[\s]*/g,"");
      send.call(res, body);
    }   
    return next();
  }); 

你这直接把数据中的空白符都去掉了

这是什么需求,其实你可以在nginx里面开启gzip的啊

五年前的老坟被挖出来了

借鉴一下六年前的

当然可以!在Node.js中使用EJS模板引擎时,你可以通过自定义过滤器或中间件来压缩生成的HTML,从而去掉多余的空行和空格。以下是两种实现方法:

方法一:使用自定义过滤器

你可以在EJS模板中定义一个自定义过滤器,用于在渲染过程中删除多余的空白字符。这需要一些额外的处理步骤,但可以让你更灵活地控制输出。

首先安装html-minifier库,它可以帮助我们压缩HTML:

npm install html-minifier

然后,在你的Node.js服务器文件中配置EJS,并添加一个自定义过滤器:

const ejs = require('ejs');
const express = require('express');
const app = express();

// 引入html-minifier
const htmlMinifier = require('html-minifier');

app.set('view engine', 'ejs');

// 自定义过滤器
ejs.filters.minifyHtml = function(html) {
    return htmlMinifier.minify(html, {
        removeComments: true,
        collapseWhitespace: true,
        minifyCSS: true
    });
};

app.get('/', (req, res) => {
    res.render('index', {
        content: 'This is a test page.'
    });
});

app.listen(3000, () => console.log('Server started on port 3000'));

接着在EJS模板中使用这个过滤器:

<%- content | minifyHtml %>

方法二:使用中间件

另一种方法是在Express应用中使用中间件来压缩HTML响应。这种方式不需要修改EJS模板,但在每个请求上都会执行,因此可能会影响性能。

你可以使用compression中间件来实现这一点:

npm install compression

然后在你的服务器文件中添加:

const compression = require('compression');

app.use(compression());

这将自动压缩所有响应,包括HTML页面。

总结

以上两种方法都可以帮助你在Node.js中压缩EJS生成的HTML。第一种方法更直接地针对HTML内容进行压缩,而第二种方法则是对整个响应流进行压缩。根据具体需求选择合适的方法即可。

回到顶部