当前位置: 首页 > news >正文

webpack定制化 加载与插件[css加载器、html插件、image打包配置、babel代码兼容、vue加载器及配置]

前提:
webpack5及其对应配套内容
node16.13.2

webpack定制化 基础配置[基础、配置、初运行]
webpack定制化 高级配置[热更新、热打包、别名、调试]

一.加载与插件

项目结构:

# 打包完成代码部署在dist;分二static与templates;static放css、img和js等等;templates专门放html
# 源代码部署在src;第一层结构为单个项目名(可为小项目,也可为完整大项目里面再细分);单个项目当前目录放入口文件;单个项目也存放模板和视图文件夹
# 静态资源部署在public;static放css和img等等;templates专门放html
├── dist
│   ├── static
│   │   ├── css
│   │   │   └── index.css
│   │   ├── img
│   │   │   └── 27f4f737224efc87924d.png
│   │   └── js
│   │       └── ch-main.js
│   └── templates
│       └── index.html
├── node_modules
│   └── ***
├── package.json
├── package-lock.json
├── public
│   ├── static
│   │   ├── css
│   │   │   └── loser.css
│   │   └── img
│   │       └── 1.png
│   └── templates
│       └── index.html
├── src
│   └── app
│       ├── App.vue
│       ├── components
│       │   └── one.vue
│       ├── main.js
│       └── views
│           └── add.js
└── webpack.config.js

1.html打包

安装:npm i html-webpack-plugin -D #本文版本5.5.0
介绍:把html打包到指定目录,并且能够自动构建关联js文件到html
注意:如何使用webpack-dev-server需要提前准备好该插件
配置:

const HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  // 其它配置
  // 插件都放 plugins 中
  plugins: [
    new HtmlWebpackPlugin({
      // 选择模板 public/index.html
      template: './public/templates/index.html',
      // 打包后的名字
      filename: path.resolve(__dirname, './dist/templates/index.html'),
      // js文件插入 body里
      inject: 'body',
    }),
  ]
}

2.css打包

安装:npm i css-loader mini-css-extract-plugin -D #本文版本分别是6.7.1 2.6.1

  • css-loader
    导入:import '../../public/static/css/loser.css'

    介绍:使得webpack可以打包css(默认没有这个功能),如果单单只要这个工具,其只会加载到js里面,并不会真正生效,需要style-loader(会将内容以style的形式写入html)或mini-css-extract-plugin(单独加载css文件)

    配置:

    module.exports = {
    	module: {
    	    rules: [
    	      {
    	        test: /\.css$/,
    	        use: ['style-loader','css-loader']
    	      }
    	    ]
      	}
    }
    
  • mini-css-extract-plugin
    介绍:mini-css-extract-plugin这个插件会将css打包生成到某目录成为单独css文件

    注意:该插件不能用于热更新,所以将使用webpack-dev-server就需要替换为style-loader

    配置:

    const MiniCssExtractPlugin = require('mini-css-extract-plugin')// css单独打包到某个位置
    module.exports = {
    	// 其它配置
    	module: {
    	    rules: [
    	      {
    	        test: /\.css$/,
    	        use: [MiniCssExtractPlugin.loader,'css-loader']
    	      }
    	    ]
    	  },
    	  // 插件都放 plugins 中
    	plugins: [
    	    new MiniCssExtractPlugin({
    	      // 将css代码输出到dist/styles文件夹下
    	      filename: '../css/index.css',// 以webpack设置js路径为当前路径
    	      ignoreOrder: true, // 忽视掉打包过程中出现的冲突警告
    	    }),
    	  ]
    }
    
  • style-loader
    介绍:style-loadermini-css-extract-plugin类似,只是它会将cssstyle的形式写入html,可以用于热加载

    安装:npm i style-loader -D #本文版本是3.3.1

    配置:

	module.exports = {
		// 其它配置
		module: {
		    rules: [
		      {
		        test: /\.css$/,
		        use: ['style-loader','css-loader']
		      }
		    ]
		  },
		 }

3.image打包

解释:webpack5已经继承好了loader,此处只需要配置路径之类的就行(不配置也能打包图片)

配置:

	const { VueLoaderPlugin } = require('vue-loader') // 大括号必须有
	module.exports = {
	  // 其它配置

	  module: {
	    rules: [
      			{
		        test: /\.(png|jpe?g|gif|svg|webp)$/,
		        type: 'asset',
		        generator: {
		          // 打包到 指定目录 文件下
			        filename: '../img/[name][ext][query]',//name表示文件名字为原名(可以用[contenthash]);ext表示. ;query表示请求资源的后缀(如png) // 以webpacke配置的js路径为当前路径
		        },
      		},
	    ]
	  }
	}

4.babel兼容

解释:可以将我们项目中的高级语法转化成比较低级的语法,此很有必要,不然低版本浏览器识别不了,把该插件最好放在生产环境,平时打包用的话可能比较耗时

安装:npm i @babel/core babel-loader @babel/preset-env @babel/plugin-transform-runtime -D

  • @babel/corebabel-loader:转换语法的工具
  • @babel/preset-env:转换的一套现成规则,其特别强大关键,如果你使用了它,此时Babel就会读取browserslist的配置,通过browserslist的配置来适配浏览器,使其能成功运行
  • @babel/plugin-transform-runtime:转换async/await所需插件

配置:

	module.exports = {
	  // 其它配置

	  module: {
	    rules: [
      {
        // 匹配js后缀文件
        test: /\.js$/,
        // 排除node_modules中的js
        exclude: /node_modules/,
        use: [
          'babel-loader'
        ],
       }
      ]
   }
}

单独创建babel.config.js

module.exports = {
  presets: [
    // 配置规则
    "@babel/preset-env"
  ],
  // 配置插件
  plugins: ["@babel/plugin-transform-runtime"]
}

单独创建.browserslistrc

> 0.5% 
last 2 versions
//last 2 versions  表示所有浏览器兼容到最后两个版本

// > 0.5%  全球市场份额大于0.5%的浏览器

// not dead 不包括已经退出市场的浏览器(比如ie)

5.vue打包

安装:

  1. npm i vue@2.6.14 # 需要与下面两个版本想匹配
  2. npm i vue-template-compiler@2.6.14 vue-loader@15.9.8 -D #配合vue版本;
  • vue-template-compiler
    解释:需要保证与vue版本一直,无需配置

  • vue-loader
    介绍:webpack用来加载vue文件的loader

    配置:

    const { VueLoaderPlugin } = require('vue-loader') // 大括号必须有
    module.exports = {
      // 其它配置
      plugins: [
        new VueLoaderPlugin()
      ],
      module: {
        rules: [
          {
            test: /\.vue$/,
            use: 'vue-loader',
          }
        ]
      }
    }
    

结语:请把本系列都看完再投入开发环境,优化配置很重要

相关文章:

  • 线程与进程的关联
  • Linux环境下fastdfs部署
  • 解锁新技能《Redis SETBIT用法》
  • STL应用 —— queue(队列)
  • 【计算机网络】OSI七层网络参考模型
  • 第二十章 控制进程(一)
  • 移动Web第四天 1 移动适配
  • JavaFx 实现按钮防抖和软件重启(Kotlin)
  • 2022年全国最新消防设施操作员(高级消防设施操作员)真题题库及答案
  • Rest学习环境搭建笔记
  • JavaScript-DOM节点的相关操作
  • 猿创征文|HCIE-Security Day49:AC准入控制SACG
  • 移动Web第二天 4 空间转换 5 动画
  • LeetCode646-最长数队链
  • 力扣:23,-合并K个升序链表
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • Django 博客开发教程 16 - 统计文章阅读量
  • Django 博客开发教程 8 - 博客文章详情页
  • HTTP--网络协议分层,http历史(二)
  • JavaScript设计模式之工厂模式
  • js 实现textarea输入字数提示
  • oschina
  • overflow: hidden IE7无效
  • Vue ES6 Jade Scss Webpack Gulp
  • 关于springcloud Gateway中的限流
  • 关于字符编码你应该知道的事情
  • 回顾 Swift 多平台移植进度 #2
  • 简析gRPC client 连接管理
  • 聊一聊前端的监控
  • 原生Ajax
  • 终端用户监控:真实用户监控还是模拟监控?
  • FaaS 的简单实践
  • 国内开源镜像站点
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #HarmonyOS:Web组件的使用
  • #pragma data_seg 共享数据区(转)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (06)金属布线——为半导体注入生命的连接
  • (4) PIVOT 和 UPIVOT 的使用
  • (C语言)逆序输出字符串
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (办公)springboot配置aop处理请求.
  • (分布式缓存)Redis持久化
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)负载均衡,回话保持,cookie
  • .CSS-hover 的解释
  • .gitignore
  • .Net 4.0并行库实用性演练
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径