我的编程空间,编程开发者的网络收藏夹
学习永远不晚

一文入门Webpack文件指纹

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

一文入门Webpack文件指纹

什么是文件指纹

文件指纹是文件打包后输出的文件名的后缀,通常用来做一些文件的版本管理

文件指纹的作用

  • 用作版本管理时,如果一个项目需要发布,只需要发布修改过的文件指纹;
  • 对于没有修改过的文件,用户在访问的时候,依旧可以使用浏览器缓存好的,无需二次加载,加速页面访问。

文件指纹策略

  • Hash

和整个项目的构建相关,只要项目文件有修改,整个项目构建的hash值就会更改,并且全部文件都共用相同的hash值

  • Chunkhash

和webpack打包的chunk有关,不同的entyr会生成不同的Chunkhash值(一个页面的值改变了并不会影响另一个页面,js文件一般采用此方法),chunkhash和hash不一样,它根据不同的入口文件(Entry)进行依赖文件解析、构建对应的chunk,生成对应的哈希值。我们在生产环境里把一些公共库和程序入口文件区分开,单独打包构建,接着我们采用chunkhash的方式生成哈希值,那么只要我们不改动公共库的代码,就可以保证其哈希值不会受影响。

  • Contenthash

根据文件内容来定义hash,文件内容不变,则contenthash不变(css文件一般采用此方法)。

比如文件index.css被index.js引用了,所以共用相同的chunkhash值。但是这样子有个问题,如果index.js更改了代码,css文件就算内容没有任何改变,由于是该模块发生了改变,导致css文件会重复构建。
这个时候,我们可以使用extra-text-webpack-plugin里的contenthash值,保证即使css文件所处的模块里就算其他文件内容改变,只要css文件内容不变,那么不会重复构建。

hash一般是结合CDN缓存来使用,通过webpack构建之后,生成对应文件名自动带上对应的MD5值。如果文件内容改变的话,那么对应文件哈希值也会改变,对应的HTML引用的URL地址也会改变,触发CDN服务器从源服务器上拉取对应数据,进而更新本地缓存。但是在实际使用的时候,这几种hash计算还是有一定区别。

占位符介绍

占位符名称定义
[ext]资源后缀名
[name]文件名称
[path]文件的相对路径
[folder]文件所在的文件夹
[contenthash]文件的内容hash,默认是md5生成
[hash]文件的内容hash,默认是md5生成
[emoji]一个随机的指代文件内容的emoji

文件指纹的设置

根据不同的文件类型一般选择不同的文件指纹策略,通常情况下:

  • JS文件采用[chunkhash]文件指纹策略
  • CSS文件采用[contenthash]文件指纹策略
  • JS文件采用[hash]文件指纹策略

下面我们来介绍下几种用法

JS文件指纹设置

设置outputfilename,使用[chunkhash]chunkhash没办法和热更新一起使用的,不能与HotModuleReplacementPlugin这个插件一起使用,所以我们只在生产环境写。

output: {                               //打包输出文件
        path: path.join(__dirname, 'dist'),
        filename: '[name]_[chunkhash:8].js'	//chunkhash指纹策略,截取前面8个字符
    }

图片文件指纹设置

设置file-loadername,使用[hash]

module: {
        rules: [
            {
                test: /.(png|jpg|gif|jpeg)$/,
                use: {
                    loader: "url-loader",
                    options: {
                        name: '[name]_[hash:8].[ext]',
                        limit: 10240 //不超过10K时,将其转化为base64
                    }
                }
            },
    },

CSS文件指纹设置

CSS文件指纹策略比较特殊,我们需要用到MiniCssExtractPlugin,设置MiniCssExtractPluginfilename,使用[contenthash]

正常情况下,如果我们使用了style-loadercss-loader的话,那么这个css会由style-loadercss插入到style里面,并且放到head头部,此时并没有一个独立的css文件,因此,我们通常会采用MiniCssExtractPlugin,通过这个插件把这个style-loadercss提取成一个独立的文件,所以,对于这个css的文件指纹,我们会设置在这个MiniCssExtractPlugin里面,给它设置一个filename,并且给它设置一个[contenthash]

注意:MiniCssExtractPlugin这个插件没办法与style-loader一起使用,因为它们之间的功能是互斥的,所以需要将style-loader换成MiniCssExtractPlugin.loader

设置步骤

首先安装MiniCssExtractPlugin

npm i -D mini-css-extract-plugin

配置webpack.config.js

const MiniCssExtractPlugin = require('mini-css-extract-plugin');
......
module.exports = {
        plugins: [
        new MiniCssExtractPlugin({
            filename: '[name][contenthash:8].css'
        })
    ],
}

文件指纹项目应用

webpack.config.js文件更名为webpack.dev.js并将内部的mode修改为development,再复制一份文件,更名为webpack.prod.jsmode修改为production

然后需要修改配置文件package.json区分production和development

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --config webpack.prod.js",
    "watch": "webpack --watch --progress",
    "dev": "webpack-dev-server -config webpack.dev.js --open"
  }

完成上述步骤,我们在项目中就可以根据生产环境和开发环境不同,配置不同的文件指纹。

到此这篇关于一文入门Webpack文件指纹的文章就介绍到这了,更多相关Webpack文件指纹内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

一文入门Webpack文件指纹

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Webpack中的文件指纹的实现

本文主要介绍了Webpack中的文件指纹的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-01-09

一篇文章教你从入门到精通 Google 指纹验证功能

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/EHomjBy4Tvm8u962J6ZgsA作者:Sun DaxiangGoogle 从 Android 6.0开始,提供了开放的指纹识
2023-06-04

一篇文章入门Python生态系统(Python新手入门指导)

译者按:原文写于2011年末,虽然文中关于Python 3的一些说法可以说已经不成立了,但是作为一篇面向从其他语言转型到Python的程序员来说,本文对Python的生态系统还是做了较为全面的介绍。文中提到了一些第三方库,但是Python社
2022-06-04

Go语言中文件处理入门指南

go 语言文件处理入门指南本文指南介绍了 go 语言中文件处理的基本概念和技术,包括:文件创建:使用 os.create 函数创建新文件。文件读取:使用 os.open 函数打开文件,并使用 ioutil.readall 读取其内容。实战案
Go语言中文件处理入门指南
2024-04-08

pandas读取txt文件的快速入门指南

Pandas是一个数据处理库,可以用来读取、操作和分析数据。在本文中,我们将介绍如何使用Pandas读取txt文件。这篇文章的目标读者是那些想要学习Pandas的初学者。导入Pandas库首先,在Python中导入Pandas库。imp
pandas读取txt文件的快速入门指南
2024-01-19

Java 文件操作入门指南:从零到精通

Java 文件操作是 Java 编程中的基本知识,也是很多应用的基础。本文将介绍 Java 文件操作的基本知识,从创建、读取、写入、复制、移动和删除文件开始,到高级操作,如文件锁和元数据操作,以及如何使用文件操作库(如 Java NIO)来提高性能。
Java 文件操作入门指南:从零到精通
2024-02-26

Vue WebPack怎么忽略指定文件或目录

本篇内容介绍了“Vue WebPack怎么忽略指定文件或目录”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!WebPack忽略指定文件或目录前
2023-06-30

python入门(四)python对文件

python对文件的操作很常用,比如我们需要打开一个文件获取数据,或者创建文件改变数据vi 1.txthello word我们创建一个文件叫1.txt,然后我们需要对文件进行操作1、对文件进行读 file = open("1.txt" "r
2023-01-31

编程热搜

目录