【Webpack】webpack的基础使用详细总结 下(建议收藏)

news2024/11/19 9:23:28

1- 前言


昨天已经介绍了weback的基础使用了,详细总结看这边博客!!!

【Webpack】webpack的基础使用详细总结 上(建议收藏)

今天来总结一下剩余的常用 !!!!

2- 处理scss


2.1 安装

运行如下的命令,即可在项目中安装此插件:

 npm i sass sass-loader -D

在这里插入图片描述

2.2 配置

在 webpack.config.js 写以下代码:

{
	test: /\.scss$/,
	use: ["style-loader", "css-loader", "sass-loader"]
},

在这里插入图片描述

2.3 作用

作用:处理scss文件

3- css抽出 mini-css-extract-plugin


插件使用去官网搜索,其他的不再赘述

  • 去官网搜索

在这里插入图片描述

  • 查看教程

在这里插入图片描述

3.1 安装

运行如下的命令,即可在项目中安装此插件:

npm install mini-css-extract-plugin -D

在这里插入图片描述

3.2 配置

在 webpack.config.js 写以下代码:

const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
  plugins: [new MiniCssExtractPlugin()],
  module: {
    rules: [
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, "css-loader"],
      },
    ],
  },
};

在这里插入图片描述

3.3 作用

作用:把css 抽出为一个单独的文件

4- css优化压缩 css-minimizer-webpack-plugin


4.1 安装

运行如下的命令,即可在项目中安装此插件:

npm  i  css-minimizer-webpack-plugin -D

4.2 配置

在 webpack.config.js 写以下代码:

  • 这将仅在生产环境开启 CSS 优化。
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");

module.exports = {
  module: {
    rules: [
      {
        test: /.s?css$/,
        use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
      },
    ],
  },
  optimization: {
    minimizer: [
      // 在 webpack@5 中,你可以使用 `...` 语法来扩展现有的 minimizer(即 `terser-webpack-plugin`),将下一行取消注释
      // `...`,
      new CssMinimizerPlugin(),
    ],
  },
  plugins: [new MiniCssExtractPlugin()],
};
  • 如果还想在开发环境下启用 CSS 优化,请将 optimization.minimize 设置为true:
// [...]
module.exports = {
  optimization: {
    // [...]
    minimize: true,
  },
};

在这里插入图片描述

4.3 作用

这个插件使用 cssnano 优化和压缩 CSS。

source mapsassets 中使用查询字符串会更加准确,支持缓存和并发模式下运行。

5- js 优化压缩 terser-webpack-plugin


5.1 安装

运行如下的命令,即可在项目中安装此插件:

 npm i terser-webpack-plugin -D

在这里插入图片描述

5.2 配置

在 webpack.config.js 写以下代码:

const TerserPlugin = require("terser-webpack-plugin");

module.exports = {
  optimization: {
    minimize: true,
    minimizer: [new TerserPlugin()],
  },
};

在这里插入图片描述

5.3 作用

该插件使用 terser 来压缩 JavaScript。

6- 设置目录别名


6.1 配置

在 webpack.config.js 写以下代码:

module.exports = {
    resolve: {
        alias: {
            '@': path.resolve(__dirname, './src'), //设置@为src目录的别名
        }
    },
};

在这里插入图片描述

6.2 使用

在这里插入图片描述

7- Devtool


7.1 教程

点击查看 webpack :devtool 教程

在这里插入图片描述

7.2 配置

在 webpack.config.js 写以下代码:

devtool:"eval-cheap-source-map"

在这里插入图片描述

7.3 作用

作用:错误与源代码有个一一对应关系
此选项控制是否生成,以及如何生成 source map。

8- webpack中的魔法注释


8.0 Prefetch

Prefetch是告诉浏览器这是一个在未来可能使用到的资源。

浏览器通常会在空闲状态取得这些资源,在取得资源之后搁在HTTP缓存以便于实现将来的请求。

8.1 安装

先安装个jQuery

npm i jquery  -S

在这里插入图片描述

8.2 配置

import时增加一条魔法注释即可:

 getJQ(){
        import(/* webpackChunkName:"jquery",webpackPrefetch:true */"jquery")
        .then(({default:$})=>{
             
              alert($("body").text())
        })
    }
//  构造函数
   render(){
       return(<div onClick={this.getJQ}> 你好react 我喜欢你</div>)
   }

在这里插入图片描述

8.3 作用

/*webpackChunkName:"jquery"*/ 给当前的js文件命名

/*webpackPrefetch: true */ 网络有空闲预加载js

9- 多入口,多出口


9.2 配置

在 webpack.config.js 写以下代码:

	entry:{
		"index":'./src/index.js', //入口
		"start":'./src/start.js'
	},
	output: { //出口
		filename: "[name]-[chunkhash].js", //文件名
		path: __dirname + "/dist" //文件夹
	},

	plugins: [
		/* 把template 文件拷贝到dist目录并插入打包的js(main.js) */
		new HtmlWebpackPlugin({
			template: './public/index.html', //模板
			chunks:["index"],//入口
			filename:'index.html'//文件名
		}),
		new HtmlWebpackPlugin({
			template: './public/start.html',
			chunks:["start"],
			filename:'start.html'
		}),
      ]

在这里插入图片描述

9.3 作用

可以同时打包两个或者多个入口文件

10- 环境变量


10.1 介绍

通过环境命令 产品环境 压缩代码,是生产环境不压缩代码,打开devtool

项目开发中:

  • 产品环境baseURL hhtp://dida100.com:8888
  • 生产环境baseURL http://localhost:8080

cross-env:运行跨平台设置和使用环境变量的脚本

10.2 传参

10.2.1 安装

运行如下的命令,即可在项目中安装此插件:

npm  i  cross-env -D

在这里插入图片描述

10.2.2 传参

package.json 中配置如下代码:

"build": "cross-env NODE_ENV=production webpack",
"serve": "cross-env NODE_ENV=development webpack serve",

在这里插入图片描述

10.2.3 配置

webpack.config.js里配置如下代码:

devtool:process.env.NODE_ENV==="production"?false:"eval-cheap-source-map",
mode:process.env.NODE_ENV,
10.2.4 使用

在js里面使用

if(process.env.NODE_ENV=="production"){
	var baseURL = "http://dida100.com:8080"
}else{
	var baseURL = "http://localhost:8080"
}
console.log(baseURL)

10.3 图解

在这里插入图片描述

11- 不用vue脚手架,自己搭建vue项目(本次搭建vue3)


11.1 安装

运行如下的命令,即可在项目中安装此插件:

npm   i  vue -S

npm i 
vue-hot-reload-api 
vue-loader 
vue-style-loader
vue-template-compiler 
-D
  • 插件

vue-hot-reload-api 热更新
vue-loader 处理.vue文件
vue-style-loader 处理样式
vue-template-compiler 编译template

在这里插入图片描述

11.2 配置

在 webpack.config.js 写以下代码:

01 导入
const { VueLoaderPlugin } = require('vue-loader')
---
02配置
rules: [{ test: /\.vue$/, use: ['vue-loader'] }]---
03插件
​ plugins: [new VueLoaderPlugin()]

在这里插入图片描述

11.3 vue文件

  • 模板文件 public/start.html
<div id="app"></div>
  • src/start.js
mport { createApp } from 'vue'
import App from './App.vue'
createApp(App).mount('#app')//创建App并挂载
  • src/App.vue
<template>
	<div>
		<h1>你好vue3</h1>
		<p>{{msg}}</p>
		<input type="text" v-model="msg" />
		<button @click="num++">{{num}}</button>
	</div>
</template>

<script>
	export default{
		data(){
			return{
				msg:"有饭吃才是王道",
				num:5
			}
		}
	}
</script>

在这里插入图片描述

11.4 运行

在这里插入图片描述

12- link与script


  • 等待页面内容加载好再去加载 js
<script  defer src=""></script>
  • 提前预加载 css
<link href="" rel=prefetch>

13- hash


13.1 概述

Hash、ContentHash、ChunkHash

  1. 浏览器对get请求有缓存,如果请求地址(文件名)没有发生变化,那么文件会在一定时间内缓存
  2. 如果内容变化我们又希望文件不缓存,这个时候我们可根据内容来命名文件 实现缓存控制
  3. logo,jquery,等常见的库应该是需要缓存的
  • hash 值的生成和整个项目有关系:
    比如我们现在有两个入口index.js和main.js;
    它们分别会输出到不同的bundle文件中,并且在文件名称中我们有使用hash;
    这个时候,如果修改了index.js文件中的内容,那么hash会发生变化;
    那就意味着两个文件的名称都会发生变化;
  • chunkhash可以有效的解决上面的问题,它会根据不同的入口进行解析来生成hash值:
    比如我们修改了index.js,那么main.js的chunkhash是不会发生改变的;
  • contenthash表示生成的文件hash名称,只和内容有关系:
    比如我们的index.js,引入了一个style.css,style.css有被抽取到一个独立的css文件中;
    这个css文件在命名时,如果我们使用的是chunkhash;
    那么当index.js文件的内容发生变化时,css文件的名也会发生变化;
    这个时候我们可以使用contenthash;

13.2 总结

hash命名

  • 可以控制浏览器的缓存,当文件发生变化的时候,hash就变化,文件名也就变化,浏览器就不缓存,当文件名保持不变,浏览器二次请求会从缓存里面去请求内容
  • 提供二次加载的速度(有效的控制缓存)

在这里插入图片描述

13.2.1 [hash]

[hash] 把内容通过hash 算法算出来的一串字符

[hash:7] 取hash 字符串前7个

只要项目内容发送变化,hash就会变化

在这里插入图片描述

13.2.2 [contenthash]

[contenthash] 内容发生变化,contenthash 才会发生变化

在这里插入图片描述

13.2.3 [chunkhash]

[chunkhash] 入口发生变化,当前的文件 chunkhash 会变化

在这里插入图片描述


14- 总结

webpack 笔记的分享就到这里了,欢迎大家一起交流学习和分享~


往期传送门

  1. 【Webpack】webpack的基础使用详细总结 上(建议收藏)
  2. 【面试题】JavaScript面试题详细总结(一)
  3. 【小程序】微信小程序自定义组件Component详细总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/29501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信抽奖活动有什么作用_分享微信抽奖小程序开发的好处

在H5游戏中&#xff0c;抽奖是最受消费者喜爱的模式之一。将H5微信抽奖活动结合到营销中&#xff0c;可以带来意想不到的效果&#xff0c;带流量和曝光率&#xff0c;所以许多企业也会在做活动时添加上不同类型的H5微信抽奖活动。 那么&#xff0c;新手怎么搭建微信抽奖活动&am…

01背包、完全背包、多重背包、分组背包总结

文章目录一、01背包问题二、完全背包问题三、多重背包问题四、分组背包一、01背包问题 n个物品&#xff0c;每个物品的重量是wiw_iwi​&#xff0c;价值是viv_ivi​&#xff0c;背包的容量是mmm 若每个物品最多只能装一个&#xff0c;且不能超过背包容量&#xff0c;则背包的最…

【ABAP】SAP发送消息至RabbitMQ

SAP发送消息至RabbitMQ ——以下关于RabbitMQ的内容大致转载于朱忠华老师的《RabbitMQ实战指南》一书 【基础知识】 消息队列中间件(Message Queue Middleware,即MQ)也可以称之为消息队列或者消息中间件,是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数…

面试官: B 树和 B+ 树有什么区别?

问各位小可爱一个问题&#xff1a;MySQL 中 B 树和 B 树的区别&#xff1f; 请自己先思考5秒钟&#xff0c;看看是否已经了然如胸&#xff1f; 好啦&#xff0c;时间到&#xff01; B 树和 B 树是两种数据结构&#xff0c;构建了磁盘中的高速索引结构&#xff0c;因此不仅 …

上海亚商投顾:沪指窄幅震荡 “中字头”概念股又暴涨

上海亚商投顾前言&#xff1a;无惧大盘大跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪沪指今日窄幅震荡&#xff0c;深成指、创业板指盘中跌超1%&#xff0c;午后探底回升一度翻红。光伏、储能等赛道午后…

[Spring Cloud] GateWay自定义过滤器/结合Nacos服务注册中心

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

DocuWare Workflow Manager(工作流管理器)

DocuWare Workflow Manager 公司是按流程运转的。销售、人力资源、财务等部门需要流畅、可靠的信息传输&#xff0c;以便在正确的时间做出正确的决策。订单管理、员工入职和发票审批等流程可以根据您的精确需求进行设计和自动化&#xff0c;避免时间浪费。 适用于复杂业务的简…

Mysql数据库相关面试题

1.关系型和非关系型数据库的区别是什么? 关系型和非关系型数据库的主要差异是数据存储的方式,关系型数据库天然就是表格存储,因此存储在数据表的行和列中,数据表可以彼此关联协作存储,很容易提取数据. 优点: 易于维护:都是使用表结构,格式一致,使用方便:sql语言通用,可以用于复…

MyBatis逆向工程和分页插件

1、分页插件 MyBatis 通过提供插件机制&#xff0c;让我们可以根据自己的需要去增强MyBatis 的功能。需要注意的是&#xff0c;如果没有完全理解MyBatis 的运行原理和插件的工作方式&#xff0c;最好不要使用插件&#xff0c; 因为它会改变系底层的工作逻辑&#xff0c;给系统带…

2022年全国职业院校技能大赛:网络系统管理项目-模块B--Windows样题7

初始化环境1.默认账号及默认密码 Username: Administrator Password: ChinaSkill22! Username: demo Password: ChinaSkill22! 注:若非特别指定,所有账号的密码均为 ChinaSkill22! 项目任务描述你作为技术工程师,被指派去构建一个公司的内部网络,要为员工提供便捷、安…

超算云平台在线功能Q-Flow、Q-Studio V2.1版本升级,web端在线建模+DFT计算

建模DFT计算还可以这么玩&#xff1f; Q-Flow&#xff08;在线可视化提交任务功能&#xff09;以及 Q-Studio&#xff08;在线建模功能&#xff09;依托Mcloud平台免费向用户开放使用。告别Linux编辑代码提交任务的模式&#xff0c;Q-Flow可在浏览器里通过拖拽图形化的第一性原…

【第06节】Selenium4 JavaScript 处理场景实战(Python Web自动化测试)

Selenium 4 【01-06节】主讲元素定位&#xff0c;处理一些特殊场景的方法与实战已经全部写完。文章所有素材来自互联网&#xff0c;如果文章有侵权处&#xff0c;请联系作者。 文章目录1、Selenium4 自动化 JavaScript 场景实战1.1 使用 JavaScript 处理富文本1.2 使用 JavaScr…

Linux——网络编程总结性学习

什么是ISP&#xff1f; 网络业务提供商_百度百科 计算机网络有哪些分类方式,计算机网络有哪些分类&#xff1f;_陈泽杜的博客-CSDN博客 路由器_百度百科 目前实际的网络分层是TCP/IP四层协议 当我们浏览⽹站找到想要下载的⽂件以后&#xff0c;找到相应的接⼝点击下载就好了。…

新形势下安全风险评估实践

​ 随着安全内涵的不断扩充和发展&#xff0c;风险评估作为安全管理的重点&#xff0c;内容以及方法都与时俱进的得到了发展和丰富&#xff0c;本文将介绍新形势下风险评估的特点和实践心得&#xff0c;以供参考。 一、新形势下安全风险评估特点 首先是内外部形势和要求的变…

Docker入门教程(详细)

目录 一、Docker概述 1.1 Docker 为什么出现&#xff1f; 1.2 Dorker历史 1.3 能做什么 虚拟机技术&#xff1a;&#xff08;通过 软件 模拟的具有完整 硬件 系统功能的、运行在一个完全 隔离 环境中的完整 计算机系统&#xff09; 容器化技术&#xff1a;&#xff08;容…

【JAVA高级】——玩转JDBC中的三层架构

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;Java案例分…

Oracle SQL执行计划操作(8)——视图与集合相关操作

8. 视图相关操作 该类操作与包含视图的SQL语句相关。当SQL语句被硬解析时,如果SQL语句中的视图未被合并,则根据不同的具体场景,如下各操作可能会出现于相关SQL语句的执行计划。 1)VIEW 创建数据的一个中间视图,一般分为系统视图和用户视图。优化器在为SQL语句生成执行计…

iOS上架流程详细版本

苹果上架审核周期长一直是困扰用户的一大问题&#xff0c;这次把我自己上架的经历分享给大家&#xff0c;避免大家入坑。 上架总流程&#xff1a; 创建开发者账号 借助辅助工具appuploader创建证书&#xff0c;描述文件 iTunes connect创建App 打包IPA上传App Store等待审…

Kubernetes(k8s)CNI(flannel)网络模型原理

一、概述 Kubernetes 采用的是基于扁平地址空间的、非NAT的网络模型&#xff0c;每个Pod有自己唯一的IP地址。网络是由CNI(container network interface)插件建立的&#xff0c;而非K8S本身。 二、常见的几种CNI插件介绍 为了使容器之间的通信更加方便&#xff0c;Google 和 Co…

计算机网络面试大总结

本文分文五大部分&#xff0c;第一部分总纲说明计算机网络层次划分的三种模型&#xff0c;一到四部分以TCP/IP协议模型作为划分标准&#xff0c;分别说明各层作用和最常见的面试题&#xff0c;最后总结网络综合面试题&#xff0c;历时六天全文一千字。 其他经典面试题参考程序员…