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

Webpack入门基础知识及案例

webpack相信大家都已经不陌生了,应用程序的静态模块打包工具。前面我们总结了vue,react入门基础知识,也分别做了vue3的实战小案例,react的实战案例,那么我们如何使用webpack对项目进行模块化打包呢? 话不多说,开始!!

目录

一、熟悉webpack的主要功能

二、Webpack的核心概念

三、使用webpack5搭建脚手架

1.然后执行npm init 进行初始化, npm install webpack webpack-cli

2.在项目src文件夹下新建main.js和 tools>index.js文件

3.打包index.html文件

 4.打包css文件。如果我们想创建一个css呢?

5.如何处理图像资源呢?

 6.babel的转化

 7.处理.vue结尾的文件

 8.如何自动运行打包后的index文件


一、熟悉webpack的主要功能

1. 模块打包:将项目中的所有模块(JavaScript、CSS、图片等)当作一个整体,通过依赖关系将它们打包成一个或多个静态资源文件

2.依赖管理:Webpack可以分析模块之间的依赖关系,根据配置的入口文件找出所有依赖的模块,并将其整合到打包结果中

3.文件转换Webpack本身只能处理JavaScript模块,但通过加载器(Loader)的使用,可以将其他类型的文件(如CSS、LESS、图片等)转换为有效的模块,使其能够被打包到最终的结果中

4.代码拆分:Webpack支持将代码拆分成多个模块,按需加载,实现按需加载和提升应用性能

5.插件系统:Webpack提供了丰富的插件系统,可以通过插件实现各种功能的扩展,例如压缩代码、自动生成HTML文件等

总之,Webpack的主要功能是将项目中的多个模块打包成一个或多个静态资源文件,并提供了丰富的功能和插件系统来满足前端开发的需求

二、Webpack的核心概念

Webpack的核心概念包括entry(入口)、output(输出)、loader(加载器)和plugin(插件)

1.Entry 【入口文件】, 指定Webpack的入口文件,Webpack将从指定的入口文件开始分析和构建依赖关系树。入口可以是单个文件或多个文件;

2.Output【输出】义打包输出的文件及路径,指定Webpack打包后的文件输出的路径和文件名

3.Loader【加载器】Webpack本身只能处理JavaScript模块,但通过Loader的使用,可以处理其他类型的文件(如CSS、LESS、图片等)

4.Plugin【插件】 插件用于扩展Webpack的功能。它可以在打包的不同阶段执行特定的任务。例如,可以使用插件来压缩代码、拆分代码、生成HTML文件等。插件通过在Webpack配置中引入并实例化,然后将其添加到plugins数组中。

三、使用webpack5搭建脚手架

1.然后执行npm init 进行初始化, npm install webpack webpack-cli
npm init //初始化
 npm install webpack webpack-cli  //安装webpack以及webpack-cli依赖包

 查看项目package.json文件 已经有webpack相关版本信息 

2.在项目src文件夹下新建main.js和 tools>index.js文件

main文件内容

// mian.js文件
import {add} from '/src/tools/index'
console.log(add(2,3));

修改我们public文件夹下的index.html 文件

在根目录新建 webpack.config.js文件 配置初入口文件信息

//webpack.config.js文件
const path = require("path")module.exports = {mode: 'development', // 指定为开发模式// 入口文件entry: {main: './src/main.js'},// 出口文件output: {// 输出到dist文件夹(打包自动生成)path: path.resolve(__dirname, 'dist'), // __dirname:表示当前文件的绝对路径(根目录)// 输出文件名在dist文件夹里的js文件夹的chunk.js下filename: 'js/chunk-[contenthash].js' // 使用由生成的内容产生的 hash}
}

修改package.json文件 我们创建了webpack的打包命令

现在试着在终端输入 npm run build 命令

npm run build

这里可以看到dist文件夹下已经生成了打包好的文件。 

可以发现对比传统脚手架的npm run build,我们自己搭建的脚手架并没有在dist文件夹里生成index.html文件,现在我们来试试吧!

3.打包index.html文件

3.1安装插件 npm install html-webpack-plugin -D

npm install html-webpack-plugin -D

在webpack.config.js文件中引入插件,并且配置插件相关信息如下: 

现在我们把dist/js下的文件删掉,然后重新打包 可以看到我们已经生成html文件了

 4.打包css文件。如果我们想创建一个css呢?

在src>style>style.css 文件

这里是main.js文件,引入样式文件以及向html添加了内容。 

//main.js
import './style/style.css'
const el = document.createElement('div')
el.className = 'title'
el.innerHTML = "这是坚强的土豆子"
document.body.appendChild(el)

安装打包css文件的依赖文件  npm install css-loader style-loader

npm install css-loader style-loader

在webpack.congfig文件中配置信息 

再次执行 npm run build,然后index.html文件浏览器打开,可以看到我们刚才加载的css效果了。

 一些常用的Webpack loader:

  1. babel-loader:将ES6+代码转换为ES5语法,以便在旧版本的浏览器中运行。
  2. style-loader 和 css-loader:用于处理CSS文件。css-loader主要负责处理样式文件中的importurl语句,而style-loader将转换后的CSS模块直接注入到HTML页面中。
  3. file-loader 和 url-loader:用于处理图片和其他资源文件。file-loader会为每一个文件生成一个对应的文件,而url-loader将小于设定大小的文件转换为base64编码的URL,减少HTTP请求
  4. sass-loader 和 less-loader:用于处理Sass和Less预处理器。它们将Sass和Less代码转换为普通的CSS代码
  5. postcss-loader:用于为CSS代码添加浏览器兼容性前缀,以确保在不同浏览器上的一致性。
  6. html-loader:用于处理HTML文件,将其中的图片等资源转换为Webpack可以识别的模块。

同理我们如果使用less,也需要先下载less-loader。

新建style.less文件 ,同时哦在main.js文件中引入 文件

//main.js文件添加
import './style/style.less'

webpack.config.js中配置信息。 

注意:下图 webpack.config文件less配置信息部分 options默认是部分css3属性需要通过postcss-loaderpostcss-preset-env才能添加浏览器兼容性前缀,以确保在不同浏览器上的一致性。

需要先下载安装 postcss-loaderpostcss-preset-env

npm install postcss-loader postcss-preset-env -D

执行npm run build ,浏览器打开发现文字内容字体已经按照我们设置的改变了

 

5.如何处理图像资源呢?

 在src>img>下导入一张png图片,并在main.js文件中导入图片在html中显示

 在webpack文件中进行配置信息,在webpack4版本中(webpack5版本不用这一步)

npm i file-loader url-loader -D

我们webpack5版本只需要在webpack.config文件中添加配置:

重新打包运行 npm run build ,可以看到我们刚刚加入的图片信息了。

 每次运行打包命令后自动覆盖原来的文件js文件信息。

webpack.config.js文件出口文件设置添加clean:设置为true就可以了。这样每次打包后的文件只有一个最新的。

 6.babel的转化

es6+的语法在旧浏览器不适用,这就需要我们自己去转化成浏览器能识别的es5代码

Babel7的入门基础知识   Babel 7 实践验证案例

npm install @babel/core @babel/preset-env babel-loader -D

但在高版本的bebel中,我们可以在根目录建一个babel.config.js。webpack.config.js只需要下图配置。

 7.处理.vue结尾的文件

新建vue页面,并在main.js中引入

1、下载安装 npm i vue vue-loader -D

2、 配置webpack.config.js文件

重新通过npm run build运行之后,index.html页面成功响应:

 8.如何自动运行打包后的index文件

如何使用npm run serve 运行项目的。需要先安装依赖:

npm i webpack-dev-server -D

接下来我们把package.json中的运行命令改成如下这样:

然后我们就可以用npm run serve启动项目了。

可以看到直接访就可以了,我们修改了msg的值,页面会自动刷新。

 好啦,我们现在已经成功搭建了一个脚手架。

关于webpack的其他知识后续会更新。

Node.js基础知识请参考:Express基于Node.js基础知识【2】全面总结 推荐-CSDN博客


相关文章:

Webpack入门基础知识及案例

webpack相信大家都已经不陌生了,应用程序的静态模块打包工具。前面我们总结了vue,react入门基础知识,也分别做了vue3的实战小案例,react的实战案例,那么我们如何使用webpack对项目进行模块化打包呢? 话不多…...

对中国人工智能与国外人工智能的思考

作为一名语文老师,我在教育的领域中见证着时代的变迁,也关注着科技的发展,尤其是人工智能这一前沿领域。当我们将目光投向中国人工智能与国外人工智能的发展时,心中不禁涌起诸多思考。 中国的人工智能近年来犹如一颗璀璨的新星&am…...

【debian系统arm架构安装docker】且换源后依旧不行就离线导入镜像

安装docker 在Debian系统上安装Docker并使用阿里云的镜像源可以通过以下步骤完成 1.更新软件包索引 前置如果需要更换源的请移步 : 初始化配置(自动连wifi,自动开启SSH)换清华源,远程桌面连接 sudo apt-get update2.安装必要的软件包以允许apt通过HTTPS使用仓库 sudo apt-get …...

Readwise 官方 Obsidian 插件使用

Readwise 官方 Obsidian 插件简介 Obsidian 中的 Readwise 注释示例 阅读已经发布了官方插件来导入你的 Readwise 数据Obsidian 。如果你还没有使用过 Readwise,那么值得一看。Readwise 是我最喜欢的 应用之一。我每天都在用它。因此,将这些数据自动导…...

A. A+B Again?

time limit per test 1 second memory limit per test 256 megabytes Given a two-digit positive integer nn, find the sum of its digits. Input The first line contains an integer tt (1≤t≤901≤t≤90) — the number of test cases. The only line of each tes…...

pr样机模板视频素材|城市户外高速路广告牌视频样机

https://prmuban.com/40369.html pr样机素材,全高清实景城市户外高速路广告牌视频样机模板,适合宣传视频制作。 主要特点: Adobe Premiere Pro 2024 全高清分辨率(19201080) 易于使用 快速渲染 无需插件 预览中使用的…...

谷歌大中华区总裁:所有企业都在问这个问题

中国开发者对于出海的热情,令Google大中华区总裁陈俊廷感慨。2024 Google I/O Connect(2024Google开发者大会)期间,他在接受第一财经记者独家采访时提到一个细节:早上7:30,他来到会场时,人们已经…...

GPT-4o:AI视觉识别的革命性飞跃

在AI的宏伟叙事中,图像识别技术始终扮演着关键角色。随着技术的不断演进,AI的视界已超越了简单的图像内容识别,它现在能够将视觉信息转化为引人入胜的文字描述。OpenAI最新力作——GPT-4o模型,以其卓越的多模态理解能力&#xff0…...

将电脑打造成私人网盘,支持外网访问之详细操作教程

你想过把自己电脑打造成随时随地访问的网盘吗?就是那种拥有一个属于自己的影音库,不用担心被和谐,随时可以登录访问电脑上的各种文件,相比传统网盘省心又安全。 使用Everything和节点小宝将电脑搭建成私人网盘,可以实现…...

spring同一个接口如何分页实现主表或主+联表group by查询

1 需求背景 我们的上游系统想要知道主表的记录关联子表所有记录中是否有一条满足特定的条件,如果有满足的就返回主表中的id。比如品牌brand主表中id为10的记录,在子表brand_rel中有id为1,2,3,4的这四个记录&#xff0…...

SpringDataJpa源码分析

我们在定义Repository的时候通常定义的时一个接口,而并没有去实现这个接口,那么Jpa是如何让开发者无需自己实现接口就可以使用Repository去操作数据库? 动态代理!!! Repository原理 试想一下JPA是如何做的…...

卷积神经网络 - 卷积神经网络与深度学习的历史篇

序言 卷积神经网络( Convolutional Neural Networks, CNN \text{Convolutional Neural Networks, CNN} Convolutional Neural Networks, CNN)与深度学习作为人工智能领域的两大重要分支,其发展历程充满了探索与突破。深度学习,作…...

初识 Floodfall 算法

文章目录 **一、Floodfall 算法的概述****二、深度优先搜索(DFS)和广度优先搜索(BFS)在 Floodfall 算法中的应用****三、算法的基本原理****四、应用场景** 一、Floodfall 算法的概述 Floodfall 算法通常用于解决与区域填充、图的…...

[Linux] LVM挂载的硬盘重启就掉的问题解决

问题:系统重启后挂在逻辑卷的盘会掉(必现) 环境:SUSE Linux 11 SP4 原因:boot.lvm是关闭的 解决:boot.lvm设置开启 参考资料: linux下lvm状态Not avaliable问题排查及处理(常见Suse操作系统…...

YOLOv8改进 | 主干网络 | 用EfficientNet卷积替换backbone【教程+代码 】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有80+篇内容,内含各种Head检测头、损失函数Loss、…...

数据库规范化设计 5大基本原则

规范化设计原则是数据库设计的基本原则,有助于减少数据冗余,提高数据一致性和完整性,简化数据管理,增强数据安全性,对整个开发项目至关重要。而缺乏规范化设计会导致数据冗余,增加存储成本,引发…...

【nginx】解决k8s中部署nginx转发不会自动更新域名解析启动失败的问题

文章目录 1. 问题2.解决办法3.扩展说明3.1 DNS解析阶段划分3.2 问题说明3.2.1 先看/etc/resolv.conf说明3.2.2 针对第一个问题3.2.3 针对第二个问题 【后端】NginxluaOpenResty高性能实践 参考: https://blog.csdn.net/u010837612/article/details/123275026 1. 问…...

LeetCode637 二叉树的层平均值

前言 题目: 637. 二叉树的层平均值 文档: 代码随想录——二叉树的层平均值 编程语言: C 解题状态: 求取平均值的时候出现了点问题 思路 C中,浮点数的相加会产生精度误差,求取平均值时最好只在最后一步进行…...

王学岗ASM

服务发现 package com.example.testasm;import android.content.Context; import android.os.Bundle;import androidx.activity.EdgeToEdge; import androidx.appcompat.app.AppCompatActivity; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat;…...

【数据结构】—— 队列

1、队列的概念2、队列的结构如何选择合适的数据结构实现队列(数组or链表) 3、队列的链式存储3.1 队列的链式存储结构3.2 队列的常见接口3.3 队列的接口实现初始化判空入队列出队列获取队头元素获取队尾元素获取节点个数销毁 3.4 源代码 4、队列的顺序存储…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...