Express.js:为 webpack 中捆绑的静态资产设置缓存控制标头

Posted

技术标签:

【中文标题】Express.js:为 webpack 中捆绑的静态资产设置缓存控制标头【英文标题】:Express.js: Set cache-control header for static assets bundled in webpack 【发布时间】:2017-10-19 16:15:51 【问题描述】:

我不知道如何使用 express.js 和 webpack 为静态资产设置 Cache-Control 标头。

在我的 react 应用中,我包含如下静态图像:

 <img src=require("./images/Logo.png") />

我的 webpack.config.js 中有一个加载器,可以将图像输出到 /public/images

module: 
    loaders: [
    
        test: /\.png/,
        loader: 'url-loader?limit=10000&name=public/images/[name].[ext]'
     ]

最后,我将 server.js 中的 /public 文件夹标记为包含静态资产并设置 Cache-Control 标头

const server = express();
server.use(express.static(path.join(__dirname, 'public'), maxAge: "30d"));

问题是require()解析的路径包括/public文件夹:

<img class="full-width" src="/public/images/Logo.png" >

express 需要一个没有 public/ 部分的 URL。

有没有办法强制express.static() 在其路径中包含/public

【问题讨论】:

【参考方案1】:

有没有办法强制express.static() 在其路径中包含/public

绝对:

server.use('/public', express.static(path.join(__dirname, 'public'), maxAge: "30d"));

【讨论】:

谢谢。我试过了,虽然静态资产是来自 /public/images URL 的服务器,但 Cache-Control 标头不存在。我需要一个静态资产具有此标头的解决方案 为我工作:Cache-Control: public, max-age=2592000 我已经在一个单独的项目中尝试过了,它确实有效。问题一定出在其他地方。感谢您的帮助!

以上是关于Express.js:为 webpack 中捆绑的静态资产设置缓存控制标头的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Express.js、GraphQL、客户端和服务器文件夹为 React 应用程序配置 Webpack?

无法访问我的站点中的链接(复制和粘贴):Node.js - Express.js - Webpack - Vue.js - 历史模式

如何在与 webpack 捆绑时将 SASS 变量转换为原生 CSS 变量?

Webpack2 Hot Module 重新加载 Express.js 通用 React 应用程序

使用 webpack 为捆绑代码添加样式

与 Webpack 捆绑时,无法使 Tether 为 Bootstrap 4 工作