webpack

news2024/11/17 16:16:10

webpack

  • 一、前端工程化
    • 1、前端开发历程
    • 2、什么是前端工程化
    • 3、前端工程化的解决方案
  • 二、webpack的基本使用
    • 1、什么是webpack
    • 2、列表隔行变色例子
    • 3、安装和配置webpack
      • 1.安装webpack
      • 2.配置webpack
    • 4、webpack.config.js的作用
    • 5、配置webpack.config.js自定义打包入口和出口
  • 三、webpack中的插件
    • 1、webpack-dev-server
    • 2、html-webpack-plugin
  • 四、webpack中的loader
    • 1、loader
    • 2、安装配置打包处理CSS文件的loader
    • 3、安装配置打包处理less文件的loader
    • 4、安装配置打包处理图片文件的loader
    • 5、安装配置打包处理js的高级语法的loader
  • 五、打包发布
    • 1、打包
    • 2、设置打包生成的js、图片文件的存放路径
    • 3、自动清理dist文件夹旧文件
  • 六、SourceMap
    • 1、什么是SourceMap
    • 2、问题解决
    • 3、发布的时候如何处理sourcemap
    • 4、@在webpack中的使用

一、前端工程化

1、前端开发历程

在这里插入图片描述


2、什么是前端工程化

在这里插入图片描述


3、前端工程化的解决方案

在这里插入图片描述

parcel开发第三方包的时候用的比较多,webpack做项目的时候用的比较多

二、webpack的基本使用

1、什么是webpack

在这里插入图片描述

2、列表隔行变色例子

在这里插入图片描述

遇到的问题:ES6导入语法import在浏览器中报错,不兼容ES6
npm init -y
npm i jquery -S

疑问:这里js文件要在src下,不能在src的js下,否则报错,why

解决: 因为webpack默认的入口是src/index.js文件 所以要改的话,得进行配置,后面会涉及到怎么配置。

3、安装和配置webpack

1.安装webpack

在终端运行如下的命令,安装webpack 相关的两个包:

npm i webpack webpack-cli -D
-S  =  --save               开发和部署后都需要依赖的包
-D  =  --save-dev           只有开发的时候依赖的包

具体使用哪个可以去npmjs.com去搜

在这里插入图片描述


2.配置webpack

1.在项目根目录中,创建名为webpack.config.js的webpack配置文件,并初始化如下的基本配置:

//使用 node.js 中的导出语法,向外导出一个 webpack 的配置对象
module.exports = {
	//mode用来指定构建模式,可选 development 和 production
	mode: 'development' 
}

2.在package.json的scripts节点下新增dev脚本如下:

"scripts": {
    "dev": "webpack" 
  },
script 节点下的脚本,可以通过 npm run 执行,例如 npm run dev

3.在终端中运行npm run dev命令,启动webpack进行项目的打包构建:

npm run dev

在这里插入图片描述

4、webpack.config.js的作用

webpack.config.js是 webpack的配置文件。
webpack在真正开始打包构建之前,会先读取这个配置文件,从而基于给定的配置,对项目进行打包。

注意:由于webpack是基于node.js 开发出来的打包工具,因此在它的配置文件中,支持使用node.js 相关的语法和模块进行webpack的个性化配置。

在webpack 4.x和5.x的版本中,有如下的默认约定:

默认的打包入口文件为src -> index.js
默认的输出文件路径为dist -> main.js

注意:可以在webpack.config.js中修改打包的默认约定

5、配置webpack.config.js自定义打包入口和出口

在webpack.config.js配置文件中,通过entry节点指定打包的入口。通过output节点指定打包的出口。示例代码如下:

//path是node.js中的一个模块
const path = require('path');

//使用 node.js 中的导出语法,向外导出一个 webpack 的配置对象
module.exports = {
	//mode用来指定构建模式,可选 development 和 production
	mode: 'development',
	//指定要处理的文件,这里__dirname到根目录了,code下,src上
	entry: path.join(__dirname,'./src/js/index.js'),
	//指定生成的文件要存放的位置及文件名
	output: {
		//存放到目录
		path: path.join(__dirname,'dist'),
		//生成的文件名
		filename: 'mymian.js'
	}
}

三、webpack中的插件

通过安装和配置第三方的插件,可以拓展webpack的能力,从而让webpack用起来更方便。最常用的webpack插件有如下两个:

1.webpack-dev-server

类似于node.js 阶段用到的nodemon工具
每当修改了源代码,webpack会自动进行项目的打包和构建

2.html-webpack-plugin

webpack中的HTML插件(类似于一个模板引擎插件)
可以通过此插件自定制index.html页面的内容

1、webpack-dev-server

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

npm install webpack-dev-server -D

配置:
1.修改package.json -> scripts中的dev命令如下:

"scripts": {
    "dev": "webpack-dev-server"
  },

2.在webpack.config.js配置

const path = require('path');
module.exports = {
	//mode用来指定构建模式,可选 development 和 production
	mode: 'development',
	devServer: {
	    static: {               //4版本之后不再是contentBase
	      directory: __dirname,//指定托管的根目录为根目录
	    },
	    compress: true,
	    port: 9000,
		open: true,//自动打开浏览器
		hot: true//启用热更新
	  },
}

在这里插入图片描述
3.配置js的路径

<script src="../dist/main.js" type="text/javascript" charset="utf-8"></script>
这里用的就是生成的js,webpack会在内存中存一份这个放到根目录, 后面用上第二个插件,就不需要我们引用了,插件会帮我们去引用

4.再次运行npm run dev命令,重新进行项目的打包

5.在浏览器中访问http://localhost:9000地址,查看自动打包效果

注意:webpack-dev-server会启动一个实时打包的http服务器


2、html-webpack-plugin

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

npm install html-webpack-plugin -D

配置:

//1.导入 HTML 插件,得到一个构造函数
const HtmlPlugin = require('html-webpack-plugin')
//2.创建 HTML 插件的实例对象
const htmlPlugin = new HtmlPlugin({
	template: './src/index.html',//指定原文件的存放路径
	filename: './index.html' //指定生成的文件的存放路径
})
//使用 node.js 中的导出语法,向外导出一个 webpack 的配置对象
module.exports = {
	//3.mode用来指定构建模式,可选 development 和 production
	mode: 'development',
	plugins: [htmlPlugin]  //通过 plugins 节点,使 htmlPlugin 插件生效
}
html-webpack-plugin这个插件还有个作用,就是可以自动给我们把内存中的生成的index.js文件注入到index.html中,不需要我们手动引入了

就是会在head中自动给添加这么一句话,把内存中的mian.js给调用出来了

<script defer="" src="main.js"></script>

四、webpack中的loader

1、loader

在实际开发过程中,webpack 默认只能打包处理以 .js 后缀名结尾的模块。其他非 .js 后缀名结尾的模块,webpack 默认处理不了,需要调用 loader 加载器才可以正常打包,否则会报错!

loader加载器的作用:协助 webpack 打包处理特定的文件模块。比如:

  • css-loader 可以打包处理 .css 相关的文件
  • less-loader 可以打包处理 .less 相关的文件
  • babel-loader 可以打包处理 webpack 无法处理的高级JS语法

在这里插入图片描述

2、安装配置打包处理CSS文件的loader

1.安装

npm i style-loader css-loader -D

2.在webpack.config.js文件中添加loader规则

module: {
		rules: [
			//定义了不同模块对应的loader
			{
				test: /\.css$/,use: ['style-loader','css-loader']
			}
		]
	}

在这里插入图片描述

  • use数组中指定的loader顺序是固定的
  • 多个loader的调用顺序是:从后往前调用

现在,在js文件中,就可以调用 css 文件了

//1.使用ES6导入语法导入jQuery
import $ from "jquery"
import '../css/index.css'

$(function(){
	//2.实现隔行变色
	$('li:odd').css('background-color','green');
	$('li:even').css('background-color','red');
}
)

注意:我这里使用…/是因为我的js文件在js文件夹下,所以需要往上跳一层,才能调用到css文件夹

在这里插入图片描述

3、安装配置打包处理less文件的loader

1.安装

npm i less-loader less -D

2.配置

module: {
		rules: [
			//定义了不同模块对应的loader
			{
				test: /\.css$/,use: ['style-loader','css-loader']
			},
			{
				test: /\.less$/,use: ['style-loader','css-loader','less-loader']
			}
		]
	}

4、安装配置打包处理图片文件的loader

1.安装

npm i url-loader file-loader -D

2.配置

module: {
		rules: [
			//定义了不同模块对应的loader
			{
				test: /\.css$/,use: ['style-loader','css-loader']
			},
			{
				test: /\.less$/,use: ['style-loader','css-loader','less-loader']
			},
			{
				test: /\.jpg|png|gif$/,use: ['url-loader?limit=20000']
			}
		]
	}
  • limit用来指定图片的大小,单位是字节( byte)
  • 只有≤limit大小的图片,才会被转为base64格式的图片

5、安装配置打包处理js的高级语法的loader

webpack只能打包处理一部分高级的JavaScript 语法。对于那些webpack 无法处理的高级js语法,需要借助于babel-loader进行打包处理。例如webpack无法处理下面的JavaScript代码:

//定义装饰器函数
function info(target){
	target.info = 'person info';
}

//定义一个普通的类
@info
class Person{}

console.log(Person.info)

1.安装

npm i babel-loader @babel/core @babel/plugin-proposal-decorators -D

2.配置

module: {
		rules: [
			//定义了不同模块对应的loader
			{
				test: /\.css$/,use: ['style-loader','css-loader']
			},
			{
				test: /\.less$/,use: ['style-loader','css-loader','less-loader']
			},
			{
				test: /\.jpg|png|gif$/,use: ['url-loader?limit=20000']
			},
			{
				test: /\.js$/,use: ['babel-loader'],exclude: /node_modules/
			}
		]
	}
在配置 babel-loader 的时候,程序员只需要把自己的代码进行转换即可,一定要排除 node_modules 目录中的JS 文件

然后在项目根目录下,创建名为babel.config.js的配置文件,定义Babel的配置项如下:

module.exports = {
	//声明 babel 可用的插件, webpack 在调用 babel-loader 的时候 ,会先加载下面的插件
	plugins: [
		['@babel/plugin-proposal-decorators',{legacy: true}]
		]
}

实际使用什么插件,去babel官网去找就可以了,找到后添加到plugins数组中就可以了

https://babeljs.io/docs/en/babel-plugin-proposal-decorators

在这里插入图片描述


因为使用了devserver,所以生成的js文件在内存中,并没有在dist中生成文件
配置了devserver,自定义的入口依旧生效,但出口不生效了
所以需要用build打包一下


五、打包发布

1、打包

在package.json文件的scripts节点下,新增build命令如下:

"scripts": {
    "dev": "webpack-dev-server",
	"build": "webpack --mode production"
  },
--model是一个参数项,用来指定webpack 的运行模式。production代表生产环境,会对打包生成的文件进行代码压缩和性能优化。

注意:通过–model指定的参数项,会覆盖webpack.config.js 中的 model选项。

配置webpack的模式默认就是开发环境,打包的时候在打包命令上给他切换为生产环境

2、设置打包生成的js、图片文件的存放路径

	output: {
		//存放到目录
		path: path.join(__dirname,'dist'),
		//生成的文件名
		filename: 'js/main.js' 
	},
{
	test: /\.jpg|png|gif$/,use: ['url-loader?limit=20000&outputPath=images']
}

3、自动清理dist文件夹旧文件

https://www.npmjs.com/package/clean-webpack-plugin

六、SourceMap

1、什么是SourceMap

**SourceMap 就是一个信息文件,里面储存着位置信息。**也就是说,SourceMap 文件中存储着压缩混淆后的代码,所对应的转换前的位置。

有了它,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码,能够极大的方便后期的调试。

这个东西记录在main.js.map文件中

在这里插入图片描述

2、问题解决

开发环境下,推荐在webpack.config.js中添加如下的配置,即可保证运行时报错的行数与源代码的行数保持一致:

module.exports = {
	//mode用来指定构建模式,可选 development 和 production
	mode: 'development',
	//运行时行号和源代码行号保持一致
	devtool: 'eval-source-map',
	}

3、发布的时候如何处理sourcemap

可以删掉,大家都看不到
或者改成另一个属性,显示行号,但是不能链接到源码,这样,自己可以根据行号去看自己哪里错了

此时只需要将 devtool 属性设置为 nosources-source-map

发布时最好是删除了 devtool 属性

警告:千万不要将 devtool 属性设置为 source-map ,这样的话,发布之后依然可以定位到源码

在这里插入图片描述

4、@在webpack中的使用

@在webpack中不能直接使用,需要配置别名才可以使用

@/是从外往里找 ./是从里往外找 这样如果文件特别深,需要很多…/

resolve: {
		alias: {
			//告诉webpack @表示src这一层目录
			'@': path.join(__dirname,'./src/')
		}
	}
import '@/css/index.css'
import '../css/index.less'

这样就看出区别来了吧,使用 @ 就不需要考虑他到底是在那一层,只要是在 @ 所关联的 src 层下就行

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

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

相关文章

乘用车排气系统流场的数值模拟

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1 课题背景及意义 1 1.2 国内外研究现状 1 1.3 课题主要研究内容 2 第2章 流体力学及流场分析软件的介绍 4 2.1 概述 4 2.2 流体力学及应用现状 4 2.3 Solidworks软件的应用范围 5 2.4 Flow Simulation 软件简介 5 第3章 排气系统理论…

软件测试的行业现状,我们的未来在哪里?

1.现状 1.1建立软件测试团队的公司规模 可看出主要当前是以中小型公司为主&#xff0c;因为大厂毕竟就那么几个&#xff0c;数量少。 1.2软件测试团队的规模 可看出主要目前的软件测试团队主要是以50人以内的团队为主(外包除外)。 1.3各公司软件测试工作的规范程度 可看出大…

优化器scipy.optimize参考指南

原文&#xff1a;https://mp.weixin.qq.com/s/BDHXQHXSzDk-RTi-VNMNEw 1 scipy.optimize简介 该scipy.optimize包提供几种常用的优化算法。 该模块包含&#xff1a; 1、使用多种算法&#xff08;例如BFGS&#xff0c;Nelder-Mead单形&#xff0c;牛顿共轭梯度&#xff0c;C…

在线预约系统开发的用途_分享在线预约小程序的作用

在微信小程序上进行在线预约&#xff0c;不管是商家还是顾客&#xff0c;都可以自由选择时间&#xff0c;顾客还可以通过预约小程序&#xff0c;了解到所选服务的详情和功能特色&#xff0c;不必等到去店内听介绍&#xff0c;顾客能节省等候时间&#xff0c;商家能解放招待人力…

【34-业务开发-基础业务-属性组和基本属性-属性组和基本属性建立关联-属性组和基本属性解除关联-未关联属性查询-确认新增】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了&#xff0c;请点击这里&#xff01;】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

【动手学深度学习】权重衰减(含Pytorch从零开始实现的源代码)

目录&#xff1a;权重衰减一、理论知识二、高维线性回归的实现步骤2.1 准备数据2.2 初始化模型参数2.3 定义L2L_2L2​范数惩罚2.4 定义训练代码实现2.5 是否加入正则化2.5.1 忽略正则化2.5.2 加入正则化三、简单实现四、源代码一、理论知识 前面我们已经介绍学习了过拟合的问题…

从发现问题到创造价值 数据智能如何助力商家双11高质量增长?

近年来&#xff0c;随着消费者的购买行为趋于多样化&#xff0c;很多品牌商家开始布局多平台及多渠道的经营&#xff0c;但随之也带来跨平台多渠道经营的数据不互通、生意数字难以追踪的难题。许多商家也借助双11等大促节点&#xff0c;围绕线下和线上开展全域营销&#xff0c;…

[附源码]java毕业设计宿舍管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Bio-Helix丨Bio-Helix艾美捷100bp DNA ladder说明书

Bio-Helix艾美捷100bp DNA ladder (11条条带&#xff0c;100-1,500pb)背景&#xff1a; PCR产物和许多专有质粒的独特组合&#xff0c;用适当的限制性酶消化&#xff0c;产生11个片段&#xff0c;适合用作琼脂糖凝胶电泳的分子量标准。DNA包括100-1500个碱基对的片段。500和15…

【Java开发】 Spring 05 :Project Reactor 响应式流框架(以Reactive方式访问Redis为例)

响应式编程基于 Project Reactor&#xff08;Reactor 是一个运行在 Java8 之上的响应式框架&#xff09;的思想&#xff0c;当你做一个带有一定延迟的才能够返回的 IO 操作时&#xff0c;不会阻塞&#xff0c;而是立刻返回一个流&#xff0c;并且订阅这个流&#xff0c;当这个流…

【论文阅读】社交网络传播最大化问题-03

Leader-aware community detection in complex networksLeader-aware community detection algorithm - 领导感知社区检测算法创新点相关工作概念定义基础概念创新概念1. &#xff08;领导力&#xff09;2. &#xff08;边缘紧性&#xff09;3.&#xff08;引力&#xff09;模型…

【javaEE】网络原理(传输层Part1)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录前言传输层1. 介绍UDP协议2.【TCP】&#xff08;重难考点&#xff09;TCP可靠传输的机制1. 确认应答2. 超时重传3. 连接管理&#xff08;三次握手、四次挥手&#xff09;【面试题&#xff01;&#xff01;】THINK前言…

项目记录:使用SpringBoot + MyBatisPlus 在MySQL字段设置外键后ID自增失效导致添加失败问题(ID生成策略)

目录 说明 外键列设置后自增失效特性演示 ID不设置自增策略&#xff0c;报错问题和解决 设置自增策略冲突问题和解决。 说明 记录在使用SpringBoot MyBatisPlus操作数据库以及和前端页面交互时遇到的问题和解决方式。 1.表主键字段设置外键之后&#xff0c;自增功能失效…

Spring Security使用JSON格式登录

本文内容来自王松老师的《深入浅出Spring Security》&#xff0c;自己在学习的时候为了加深理解顺手抄录的&#xff0c;有时候还会写一些自己的想法。 Spring Security中默认的登录参数传递的格式是key/value形式&#xff0c;也是表单登录格式。在实际项目中我们可能会通过Json…

小米蓝牙耳机怎么选?适合小米手机的蓝牙耳机推荐

小米可以说是数码界的一股清流&#xff0c;在手机价格上做出了巨大的贡献&#xff0c;它的产品已经覆盖了我们的生活&#xff0c;包括智能家居、穿戴设备、通讯等等&#xff0c;蓝牙耳机作为出行必备的蓝牙耳机单品&#xff0c;耳机品牌众多&#xff0c;意味着我们有更多的选择…

带你深入了解什么是 Java 线程池技术

我们在程序开发中为了“压榨”计算机的 CPU 资源&#xff0c;会去使用多线程来提高程序的性能&#xff0c;在高并发的场景下&#xff0c;多线程编程显得尤为重要。而在线上&#xff0c;我们使用多线程大部分都是通过线程池来管理。线程池是一种基于池化思想的线程管理工具&…

服务器优化

文章目录服务器负载分析CPU 使用率内存使用率磁盘 I/O平均负载网络使用情况服务器内核参数调优单个进程最大打开文件数TCP 相关设置服务器负载分析 在性能调优时&#xff0c;需要先对服务器负载进行分析&#xff0c;通常而言&#xff0c;我们主要分析 CPU 使用率、内存使用率、…

android——自定义加载按钮LoadingButton

方式一 效果图&#xff1a; simpleButton类代码&#xff1a; package com.oneway.demo.navcontroller.view;import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.SuppressLint; import android.content.Context; i…

基于TCP的DNS传输:操作要求

本文档更新了RFC 1123和RFC 1536。本文档要求将允许DNS消息在Internet上通过TCP传输的操作实践作为当前最佳实践。此操作要求与RFC 7766中的实施要求一致。TCP的使用包括基于未加密TCP的DNS以及加密的TLS会话。该文件还考虑了这种形式的DNS通信的后果&#xff0c;以及在不支持当…

腾讯T3整理分享的LeetCode算法小抄完整文档

前言 本文⽬前可以⼿把⼿带你解决 110 道 LeetCode 算法问题&#xff0c;⽽且在不断更新&#xff0c;全部基于 LeetCode 的题⽬&#xff0c;涵盖了所有题型和技巧。 目录 主要内容 ⽬前已包含的 114 道题⽬教程如下&#xff1a; 1.两数之和 10.正则表达式匹配 100.相同的树 …