关于webpack的文件打包分割,并防止js文件缓存

在使用Webpack打包项目时,需要在打包的文件中更新版本号,以便于版本管理和防止缓存。

可以通配置output方式实现,包括使用[contenthash]或[hash]占位符在输出文件名中生成基于内容变化的哈希值。

实现原理:

Webpack允许你在输出文件的名称中使用[contenthash]或者[hash]占位符,这些占位符会根据文件内容生成一个哈希值,当文件内容发生变化时,哈希值也会变化,从而实现版本控制。

在 vue.config.js中

javascript 复制代码
module.exports = {
	//使用outputDir 指定了输出目录
    outputDir: 'dist',
    configureWebpack: {
        output: {
        	path: path.resolve(__dirname, 'dist'),
            // 在 outputDir 的基础上,进一步指定文件名
            filename: '[name].[contenthash].js' 
        }
    }
};

配置完项目之后重启,查看项目是否正常运行。

如果出现报错为:

javascript 复制代码
Cannot use [chunkhash] or [contenthash] for chunk in '[name].[contenthash].js' (use [hash] instead)

则将[contenthash]修改为[hash]

javascript 复制代码
output: {
      path: path.resolve(__dirname, 'dist'),
      // 使用 [hash] 占位符,根据文件内容生成哈希值
      filename: '[name].[hash].js' 
   },

原因:

使用限制:[chunkhash] 和 [contenthash] 主要用于根据文件内容生成哈希值,以此来实现浏览器缓存的优化。在某些情况下,Webpack 没办法准确计算出文件内容的哈希值,像在动态导入模块或者某些特殊的代码分割场景中。

使用场景不匹配:当使用动态导入模块时,Webpack 可能无法确定每个代码块(chunk)的具体内容,所以不能使用 [chunkhash] 或者 [contenthash]。
解决方案:

使用 [hash] 替代:[hash] 是基于整个构建过程生成的哈希值,而不是基于单个文件内容。虽然它的粒度没有 [chunkhash] 和 [contenthash] 那么细,但在某些无法使用它们的场景下可以作为替代方案。

另外,更详细的配置可以配置 splitChunks项。

相关推荐
daols8810 分钟前
vue甘特图vxe-gantt如何实现拖拽任务条时如有已关联依赖线,同时更新依赖任务的日期的方式
javascript·vue.js·甘特图
我命由我1234529 分钟前
前端开发概念 - 无障碍树
javascript·css·笔记·学习·html·html5·js
绿豆人40 分钟前
Cache缓存项目学习4
windows·学习·缓存
ZC跨境爬虫1 小时前
跟着 MDN 学 HTML day_29:(动态构建与更新 DOM 树)
前端·javascript·ui·html·html5·媒体
2501_912784082 小时前
TaoCarts 反向海淘系统架构实战:1688代采与高并发缓存设计全解析
缓存·架构·系统架构·跨境电商·taocarts
搜狐技术产品小编20232 小时前
深度解析与业务实战:将 screenshot-to-code 改造为支持 React + Ant Design 的前端利器
前端·javascript·react.js·前端框架·ecmascript
weixin_471383032 小时前
set和map结构,减少O(n)复杂度
前端·javascript
倒带人生3 小时前
将 $confirm 对话框改为 a-modal 实现的通用技术方案
javascript·ant design
费曼学习法3 小时前
Vue 3 编译优化揭秘:静态提升与 PatchFlags 的极致性能
javascript·vue.js
ZC跨境爬虫3 小时前
跟着 MDN 学 HTML day_27:(深入理解 HTML 属性反射机制)
前端·javascript·ui·html·音视频·媒体