07.webpack5-常见的Loaders&Plugins

1.Webpack打包其他资源

1.1 打包图片

  1. 使用图片的两种方式:
  1. background-image url模式
  2. img 标签的src

1.2 file-loader

  1. 处理jpg、png等格式的图片,我们需要的loader是:file-loader
  2. file-loader的作用:帮助我们处理import/require()方式引入的一个文件资源,并且会将它放到我们输出的文件夹中;
  3. jpe?g ?在正则表达式中代表 0个或者1个 , + 表示1次或者多次, * 表示 0次或者多次
  4. 打包出来的文件(图片)是一个16进制的Hash值
  5. background:contain; // css中图片适配
  6. img元素的图片使用
  1. 在Js代码中创建img标签;
  2. 通过使用 img.src = “…/img/picName.png” 给img标签图片路径;
  3. 打包出来之后是没有办法正常显示的
  4. 正确使用方法,是将图片作为资源引入const imgSrc = require(“…/img/picName.png”)
  5. imgEl.src = imgSrc;
  1. 通过img元素的图片使用,实际上是template引入图片
  2. template也会被vue-loader编译

1.3 文件的命名规则

  1. 有时候我们处理后的文件名称按照一定的规则进行显示;
  2. 保留原来的文件名、扩展名,同时为了防止重复,包含一个hash值等;
  3. 这个时候我们可以使用PlaceHolders来完成;
  4. 常见的PlaceHolders:
  1. [ext]:处理文件的扩展名;
  2. [name]:处理文件的名称;
  3. [hash]:文件的内容,使用MD4的散列函数处理,生成一个128的hash值(32个16进制);
  4. [contentHash]:在file-loader和[hash]结果是一致的;
  5. [hash:]:截取hash的长度,默认32个字符;
  6. [path]:文件相对于webpack配置文件的路径;
{
	test:/.\(jpe?g|png|svg|gif)$/,
	use: [
		{
				loader : "file-loader",
				options: {
						//  这是在打包的文件夹中添加一个img文件夹
						//  后面是命名规则
						name:"img/[name]_[hash:6].[ext]" 
				}
		}
		]
}

1.4 url-loader

  1. url-laoder和file-loader的工作方式是相似的,但是可以将小的文件,转成base64的URL
  2. 图片编码成base64的URL,浏览器可以直接解析base64
  3. 图片转成base64,实际上是对图片加载时候的一个优化
  4. 判断文件大小,判断多大的文件才被编码成base64
{
	test:/.\(jpe?g|png|svg|gif)$/,
	use: [
		{
				loader : "url-loader",
				options: {	
						name:"img/[name]_[hash:6].[ext]" 
						// 大于 100M的时候不被打包
						limit: 100 * 1024  // 对应的单位是byte
				}
		}
		]
}

1.5 认识asset module type

  1. 我们当前使用的webpack版本是webpack5:
  1. 在webpack5之前,加载这些资源需要使用一些loader,比如raw-loader、url-loader、file-loader;
  2. 在webpack5开始,我们可以直接使用资源模块类型(asset module type),代替上面的那些loader;
  1. 资源模块类型(asset module type),通过添加4种新的模块类型,来替换所有这些loader:
  1. asset/resource: 发送一个单独的文件并导出URL,之前通过使用file-loader;
  2. asset/inline: 导出一个资源的data URL, 之前使用url-loader;
  3. asset/source: 导出资源的源代码,之前使用raw-loader;
  4. asset在导出一个data URL和发送一个单独的文件之间自动选择,之前通过使用url-loader,并且配置资源体积限制实现;
{
		test: /.\(jpe?g|png|svg|gif)$/,
		// 模块类型
		type:"asset",
		generator:{
			// 规定打包之后的名字 后缀名不加 . 
			filename:"img/[name]_[hash:6][ext]"  
			// 也可以在output中编写输出的文件名称
			// assetModuleFilename:"img/[name]_[hash:6][ext]"
		},
		parser: {
			dataUrlCondition: {
			   //  规定是否转为base64编码最大值
 				maxSize: 100 * 1024
			}
		}
}

1.6 加载字体文件

  1. 我们需要使用某些特殊的字体或者字体图标,那么我们会引入很多字体相关的文件,这些文字的处理也是一样;
  2. 第一种方式:使用file-lodaer:
{
	test : /.\(eot|ttf|woff2?)$/,
	use : {
		loader : "file-loader",
		options : {
			outputPath : "font",
			filename : "[name]_[hash:6].[ext]",
			// 与以上两句相同效果的用法
			// name : "font/[name]_[hash:6].[ext]" 
		}
	}
}
  1. 第二种方式:使用asset/resource:
{
	test : /.\(eot|ttf|woff2?)$/,
	type : "asset/resource",
	generator : {
		filename : "font/[name]_[hash:6][ext]"
	}
}

2.webpack的插件

  1. 每次打包的时候都要先删除之前留下的包,比较麻烦;
  2. build文件夹中,缺少index.html作为资源的入口文件;
  3. loader是加载模块的时候使用,自动删除原有包这个操作应该使用Plugin插件

2.1 认识Plugin

  1. webpack的另一个核心是Plugin
  2. Loader是用于特定的模块类型进行转换;
  3. Plugin可以用于执行更加广泛的任务,比如打包优化、资源管理、环境变量注入等;

2.2 CleanWebpackPlugin

  1. 每次修改配置,重新打包,都需要手动删除build文件夹,可以通过这个插件来自动删除;
  2. 安装命令:npm install clean-webpack-plugin -D
  3. 插件的引入

const { CleanWebpackPlugin } = require(“clean-webpack-plugin”);

  1. 插件的使用

plugins: [
// 一个个的插件对象
new CleanWebpackPlugin()
]

2.3 HtmlWebpackPlugin

  1. 另外还有一个不太规范地方:
  1. 我们的HTML文件是编写在根目录下的,而最终打包的build文件夹中是没有index.html文件的;
  2. 进行项目部署的时候,笔谈也是需要有对象的入口文件index.html;
  3. 所以我们也需要对index.html进行打包处理
  1. 指定打包之后的html模板
  2. 语法**<% 变量 %>,这个是EJS模块填充数据**的方式;
  3. 在配置HtmlWebpackPlugin时,我们可以添加以下配置;
  1. template:指定我们要使用的模块所在的路径;
  2. title:在进行html’WebpackPlugin.options.title读取时,就会读到该信息;

2.4 DefinePlugin

  1. 模块中的BASE_URL的常量
  2. webpack内置的插件,DefinePlugin允许在编译时创建配置的全局常量(不需要单独安装);
new DefinePlugin({
     BASE_URL:"  './'  "    // 当前路径
 })

2.5 CopyWebpackPlugin

  1. public文件夹中的内容,在打包之后会复制到build文件夹下,其中index.html用来做生成
  2. 将public文件夹下的内容复制到打包之后的文件夹下;
    new CopyWebpackPlugin({
      patterns: [
        {
          from: "public",   // 复制的文件夹为public
          to: "./",  // 复制到 当前文件夹(build)
          globOptions: {
            ignore: [
            //  忽略 public下的所有index.html文件
              "**/index.html" 
            ]
          }
        }
      ]
    })

2.6 Mode配置

  1. 设置模式:development(开发) / production(生产);
  2. devtool:source-map

设置source-map,建立js映射文件,方便调试代码和错误
在这里插入图片描述

  1. Mode配置选项,可以告知webpack使用响应模式的内置优化
  1. 默认值是production(什么都不设置的情况下);
  2. 可选择的值有:none | development | production;
  1. 选项的区别:

在这里插入图片描述

  1. Mode代表webpack要默认设置哪些属性;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coderHan_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值