首页 > 解决方案 > 如何处理nodejs中的br和gz文件?

问题描述

我正在使用 brotli-webpack-plugin 和 compression-webpack-plugin 来压缩我的 js/html/css 文件。

在我运行 webpack 之后,它会为每个 js 文件创建.br.js.gz文件。

我的问题是我如何在 nodejs 中提供这些文件?目前我使用静态中间件服务。

我应该提供.br/.gz文件而不是 js 吗?

const CompressionPlugin = require("compression-webpack-plugin");
const BrotliPlugin = require("brotli-webpack-plugin");

new BrotliPlugin({
    asset: "[path].br[query]",
    test: /\.(js|css|html|svg)$/,
    threshold: 10240,
    minRatio: 0.7
})

标签: node.jswebpack

解决方案


您应该创建一个回退机制,因为并非所有浏览器都支持所有类型。

一种方法是:

读取Accept-Content标头,检查浏览器支持的类型并为请求提供最佳文件类型。

幸运的是,有一个库express-static-gzip

const path = require('path');
const express = require('express');
const expressStaticGzip = require('express-static-gzip');
const app = express();

// app.use(express.static(path.join(__dirname))); replace this with the line below

app.use(
  '/',
  expressStaticGzip(path.join(__dirname), {
    enableBrotli: true,
    orderPreference: ['br'],
  }),
);

推荐阅读