一文入门Webpack文件指纹_第1页
一文入门Webpack文件指纹_第2页
一文入门Webpack文件指纹_第3页
一文入门Webpack文件指纹_第4页
一文入门Webpack文件指纹_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一文入门Webpack文件指纹目录什么是文件指纹文件指纹的作用文件指纹策略占位符介绍文件指纹的设置JS文件指纹设置图片文件指纹设置CSS文件指纹设置设置步骤文件指纹项目应用

什么是文件指纹

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

文件指纹的作用

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

文件指纹策略

和整个项目的构建相关,只要项目文件有修改,整个项目构建的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文件指纹设置

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

output:{//打包输出文件

path:path.join(__dirname,'dist'),

filename:'[name]_[chunkhash:8].js'//chunkhash指纹策略,截取前面8个字符

}

图片文件指纹设置

设置file-loader的name,使用[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,设置MiniCssExtractPlugin的filename,使用[contenthash]。

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

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

设置步骤

首先安装MiniCssExtractPlugin

npmi-Dmini-css-extract-plugin

配置webpack.config.js

constMiniCssExtractPlugin=require('mini-css-extract-plugin');

......

module.exports={

plugins:[

newMiniCssExtractPlugin({

filename:'[name][contenthash:8].css'

}

文件指纹项目应用

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

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

"scripts":{

"test":"echo\"Error:notestspecified\"exit1",

"build":"webpack--configd.js",

"wat

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论