webpack5(一)

news/2024/11/17 13:22:22/

什么是webpack

webpack是一个静态资源打包工具,它会以一个或者多个文件作为打包的入口,将整个项目的所有文件编译组合成一个或多个文件输出出去。输出的文件就是变异好的文件,可以在浏览器端运行。一般将 webpack 输出的文件称为 bandle 。

webpack 本身的功能也是有限的,一共有两种模式:

开发模式:仅能编译js中 ES Module 语法。
生产模式:可以编译js中 ES Module 语法,还可以压缩 js 代码。
 

为什么需要打包工具

开发时,一般会使用框架、ES6模块化语法、css预处理器等语法进行开发,这样的代码如果想在浏览器运行必须经过编译,成为浏览器能识别的 js、css 等语法后才能运行。
打包工具就是用来编译代码的。同时还可以压缩代码、做兼容性处理、提升代码性能等。

目前一些常用的打包工具:

Grunt、Gulp、Parcel、Webpack、Vite 等等。

npm 和  npx

npm是用来下载包的

npx 是将node_modules文件夹中的 .bin 目录临时添加为环境变量,这样就可以访问该环境变量下的应用程序

npx的作用如下:

1.默认情况下,首先检查路径中是否存在要执行的包(即在项目中);

2.如果存在,它将执行;

3.若不存在,意味着尚未安装该软件包,npx将安装其最新版本,然后执行它;

假设有一个名为my-package的软件包,想要执行它。

好吧,若没有npx,要执行一个软件包,必须通过其本地路径运行来完成,如下所示:

./node_modules/bin/my-package

或在 package.json文件的 scripts section中将其定义为单独的脚本,如下所示:

{"name":"something","version": "1.0.0","scripts": {"my-package":"./node_modules/bin/my-package"}
}

然后使用npm run my-package运行。

现在,运用npx,只需运行npx my-package.,即可轻松实现此目的。

webpack的配置有哪些?核心概念?

webpack有5大核心概念:

1. entry(入口)指示Webpack从哪个文件开始打包。
2. output(输出)指示Webpack打包完的文件输出到哪里,如何命名等。
3. loader(加载器)webpack本身只能处理 js、json等资源,其他资源需要借助 loader 才能解析。
4. plugins(插件)扩展webpack的功能。
5. mode(模式)开发和生产两种模式 development/production。

⚠️注意:output 中的 path 是全部文件的输出路径;但 filename指的只是入口文件输出后的路径。
clean:true,设置打包前清空

webpack.config.js 文件:

const path = require("path") //固定写法 node中的核心模块,专门用来处理路径问题//依赖于node中的common.js模块化
module.exports = {//入口entry:'./src/main.js',//相对路径//出口 文件的输出路径 一个对象 包含路径和文件名output:{// __dirname node.js中的变量 用来表示当前文件的文件夹目录path:path.resolve(__dirname,'dist'),//绝对路径filename:'main.js',clean:true,//自动清空上次打包的内容,其实就是在打包前,将整个path目录进行清空,再打包},//loader 加载器module:{rules:[//loader的配置],},//plugin 插件plugins:[//plugin的配置],//模式mode:'development'//或 production
}

 什么是开发模式

如何处理样式资源 

如果需要webpack进行打包,那么必须在入口文件进行引入。

css/less/sass/stylus 都有自己对应的loader,不同的是,如果使用预处理器,预处理器的loader会先将预处理器处理为css文件,然后再继续执行,即将css代码编译成coomonjs模块放入js,再将js中的css文件通过创建style标签的方式加入到html中。

1.npm install 需要下载的loader
2.配置方式/内联方式(不推荐)

在webpack.config.js中进行配置:

module.exports = {module: {rules: [{ test: /\.css$/, //只检测.css文件//执行顺序为从右到左,从下至上use: ['style-loader',//将js中css文件通过创建style标签添加到html中生效'css-loader'//将css代码编译为common.js模块放到js中]},],},
};

3.将需要打包的资源在入口文件引入。

如何进行图片和字体图标处理

webpack4 中通过 file-loader 和 url-loader 进行图片资源的处理,但是在 webpack5 中,已经将两个 loader 内置到 webpack 中了,只需要简单配置。

项目中的图片优化:
习惯将小于10kb的图片转换为base64(DataUri),减少请求,减轻服务器压力。
对于过大的图片,不适合转为base64,因为转为base64文件体积会变大,越大的图片增加的体积越大,导致整体页面的加载速度变慢。

module.exports = {module: {rules: [{ test: /\.(png|jpg|gif)$/, //需要查看的图片后缀type:"asset",parser:{dataUrlCondition:{//小于10kb的图片转换为base64maxSize:10*1024,//10kb},],},
};

处理字体图标资源

此时不需要进行 base64 的转换,type 类型也是 asset 下的 resource

module.exports = {module: {rules: [{ test: /\.(ttf|woff2?)$/, //需要查看的图片后缀type:"asset/resource",//也是可以设施generator的值generator:{filename:"static/media/[hash]/[ext]/[query]",}],},
};

怎样操作输出文件的打包目录

当我们希望打包出来的文件不是全部堆砌在.dist目录下,希望进行 js/image 的分级目录时:

output中更改 js 输出后的文件路径:

output:{path:path.resolve(__dirname,'dist'),//绝对路径filename:'static/js/main.js',},

module下 rule 中和 asset 同级定义generator

module: {rules: [{ test: /\.(png|jpg|gif)$/, //需要查看的图片后缀type:"asset",parser:{dataUrlCondition:{//小于10kb的图片转换为base64maxSize:10*1024,//10kb},generator:{//输出的图片名称//hash指的是打包完成后,图片会被打包为一串字母数字,此值即为hash值,//hash值如果觉得太长可以设置为[hash:10],为只取前十位//ext 指的是文件后缀名filename:"static/image/[hash]/[ext]/[query]",}],},

此时,.dist目录下会有一个static文件夹,static文件夹下有两个文件夹,js文件夹下是打包好的入口文件,image文件夹下是打包好的图片资源。


http://www.ppmy.cn/news/1055678.html

相关文章

uniapp-form表单

<template><view class"ptb-20 plr-30 bg min100"><view class"bg-white radius-20 pd-30"><view class"bold mt-30 mb-50 size-32">选择方式&#xff1a;</view><u--form labelPosition"left" :mod…

微服务中间件--http客户端Feign

http客户端Feign http客户端Feigna.Feign替代RestTemplateb.自定义Feign的配置c.Feign的性能优化d.Feign的最佳实践分析e.Feign实现最佳实践(方式二) http客户端Feign a.Feign替代RestTemplate 以前利用RestTemplate发起远程调用的代码&#xff1a; String url "http:…

docker之Compose与DockerSwarm

目录 Compose 简介 概念 为什么需要&#xff1f; 配置字段 常用命令 安装 1.下载 2.授权 使用 1.创建文件 2.启动 docker Swarm 关键概念 调度策略 spread binpack random 特性 集群部署 1.准备 2.创建swarm并添加节点 在主服务器上创建swarm集群 节点…

【方案】基于AI边缘计算的智慧工地解决方案

一、方案背景 在工程项目管理中&#xff0c;工程施工现场涉及面广&#xff0c;多种元素交叉&#xff0c;状况较为复杂&#xff0c;如人员出入、机械运行、物料运输等。特别是传统的现场管理模式依赖于管理人员的现场巡查。当发现安全风险时&#xff0c;需要提前报告&#xff0…

不同规模的测试团队分别适合哪些测试用例管理工具?测试用例管理工具选型指南

随着软件系统规模的持续增大&#xff0c;业务复杂度的持续增加&#xff0c;软件测试的复杂度也随之越来越大。软件测试工作的复杂性主要体现在测试用例的编写、维护、执行和管理方面。而创建易于阅读、维护和管理的测试用例能够显著减轻测试工作的复杂性。 本篇文章将较为系统的…

智能主体的工作原理

智能主体的一切行为是受任务驱使的&#xff0c;以任务表的形式来表示&#xff0c;初始由 用户静态建立&#xff0c;然后通过通信而动态地改变。任务表只是指明智能主体必须做的 事&#xff0c;并不是怎样做。任务的实现由效应器与其他智能主体合作的形式来完成。 感知器表示…

Java基础(十七)字符串

3. 字符串变量 3.1 StringBuffer类&#xff08;jdk 1.0 开始提供&#xff09; StringBuffer类是一个线程安全的可变字符串类&#xff0c;它可以动态地修改字符串内容。主要特点如下&#xff1a; StringBuffer对象创建后&#xff0c;可以随时通过调用其方法来修改字符串内容。…

目标检测任务数据集的数据增强中,图像垂直翻转和xml标注文件坐标调整

需求&#xff1a; 数据集的数据增强中&#xff0c;有时需要用到图像垂直翻转的操作&#xff0c;图像垂直翻转后&#xff0c;对应的xml标注文件也需要做坐标的调整。 解决方法&#xff1a; 使用pythonopencvimport xml.etree.ElementTree对图像垂直翻转和xml标…