node.js - 如何处理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
})
解决方案
您应该创建一个回退机制,因为并非所有浏览器都支持所有类型。
一种方法是:
读取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'],
}),
);
推荐阅读
- android - 为特定类调用模拟方法 mockito
- javascript - 定位网站中的所有链接 - JavaScript
- r - 测试相同结构的嵌套列表
- rally - Java 中的 RallyApi - 尝试返回功能的项目层次结构
- node.js - 使用节点运行 js 文件给了我一个“HTMLDivElement”未定义。我需要导入它,还是特定于 Node 之外的浏览器?
- c++ - 谷歌测试夹具作为班级成员
- c# - 在完成当前异步方法(wpf)之前允许所有正在运行的任务完成的通用方法?
- javascript - setState 是否需要一些时间来执行?
- r - 如何找到在分类变量中具有两个组之一的连续变量的 SD 和均值
- java - 如何使用 mockito 模拟泛型方法?