css - 在 css webpack 中为图像添加哈希
问题描述
有没有办法在使用 Webpack 编译时向 CSS 中引用的图像添加哈希值?
我正在使用 React,并且每个组件文件都有单独的 scss 文件(例如 header.js 和 header.scss)。在一些 scss 文件中,我有一个背景图像。但是,我的服务器具有超高的缓存级别,并且正在将图像缓存在已编译的 css 文件中。
我想做的是,在 css 编译期间,为每个图像引用添加一个哈希值,该值将在每次构建时更新。例如,它会编译成这样:
.background-class {
background-image: url('images/my-image.jpg?0adg83af0');
}
我尝试使用 url-loader,但是因为这些图像没有在 JS 文件中被引用,我认为它们没有被拾取?
解决方案
我最终使用了 PostCSS 和 PostCSS CacheBuster 的组合。如果有人想将它添加到他们的 webpack 设置中,您需要运行npm i postcss-loader postcss-cachebuster
,然后在 webpack.config.js 中,添加const PostCssCacheBuster = require('postcss-cachebuster');
到文件顶部,并在 css-loader 和 sass-loader 之间添加以下加载器配置(显然如果您使用此设置):
loader: 'postcss-loader',
options: {
sourceMap: true,
plugins: () => [
PostCssCacheBuster({
imagesPath: "/src/Frontend",
cssPath: "/" + distributionPath,
supportedProps: [
'background',
'background-image'
],
paramName: 'v='
})
]
}
},
推荐阅读
- python - 我在 mongodb 中有一个数据集。我想执行一些用 python 编码的函数。如何在它上面执行这些函数(即给定数据的条形图)
- node.js - 为什么我在订阅 patientAllergies observable 时会收到以下错误?
- php - Container.php 中不存在类日志,但 .env 中没有未加引号的空格或配置中的错误
- javascript - Array.some() 不是函数
- linux - vim:如何在 vim 可视模式下复制单词,但在可视块模式下粘贴?
- javascript - 为什么在 setInterval 中更新的用户名没有反映在视图中
- c# - AJAX POST 与 GET
- coldfusion - 判断文件是文件夹还是文件 Coldfusion
- reactjs - React-Data-Grid 只显示 9 行
- tensorflow - 张量流中卷积神经网络8位量化的量化方案