【Webpack】基本使用方法

news/2024/9/17 7:16:53/ 标签: webpack, 前端, node.js

📢博客主页:逆旅行天涯-CSDN博客
📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!

参考视频:

30 分钟掌握 Webpack_哔哩哔哩_bilibili

什么是webpack

简单来说就是一个 打包工具,

可以将互相依赖的html、css、js以及图片字体等资源文件,经过处理打包成一个可执行的项目文件

🌰看例子

环境初始化

在需要使用webpack的文件夹下,

首先执行npm init -y初始化,其中-y表示所有选项使用默认值

再执行npm add webpack webpack-cli --devwebpack安装到开发者环境中

这样我们就能获得初始的开发环境

基础的例子

新建一个 'src' 文件夹,然后在里面新建一个 'index.js'

console.log("hello word")

编写一个简单的console.log调试功能,同时将这个文件引入 'index.html'

<body><h1>hello world</h1><script src="./index.js"></script></body>

执行一下,类似这样

所以现在我们就能打包这个文件了

执行命令 npx webpack

可以看到生成了 'dist/main.js'

其中main.js就是webpack打包后的内容,可以看到和我们写的console.log一致

所以接下来体验一下webpack整合代码的功能

在src下再写一个文件data.js

然后修改index.js为调用这个getData()函数

然后再执行npx webpack打包代码

可以看到main.js中的代码简化了

说明webpack智能地判断了代码的逻辑,通过import获取了代码,知道我们只打印了这个数组,所以整合到一起的代码就如上图所示

✨配置webpack

这里才是学习webpack的重头戏,毕竟在webpack配置完成后,每次只要执行npx webpack便能智能地完成打包

初步配置

在根目录下新建一个'webpack.config.js'文件

const path=require('path')module.exports={//环境配置   development开发者    production  生产者mode:"development",
//方便查看源代码
devtool:"inline-source-map",//入口文件entry:"./src/index.js",//打包文件名output:{//文件名filename:"dist.js",//文件路径path:path.resolve(__dirname,"dist")}
}

其中

  • mode,选择了开发者模式
  • entry,选择了相对于config文件的src目录下的index.js作为入口文件
  • output, 对于输出配置了输出的名字,并且使用了自带的path配置了输出目录

执行npx webpack,可以看到不仅重新输出了dist.js,其中的内容也和之前的有了不一样

打包CSS文件和图片

要先安装 npm add --dev style-loader css-loader

然后要在webpack.config.js里对需要引入的文件名进行配置,如css文件的配置如下

  module: {rules: [{test: /\.css$/i,use: ["style-loader", "css-loader"],},],},

同理要多配置图片文件则再写一个rules中的元素即可

  module: {rules: [{test: /\.css$/i,use: ["style-loader", "css-loader"],},{test: /\.(png|svg|jpg|jpeg|gif)$/i,type: "asset/resource",},],},

所以在入口文件index.js中引入style.css和图片assets/images/avater.jpg即可

使用webpack插件自动生成html文件

还是安装

npm add html-webpack-plugin --dev

然后导入webpack.config.js文件

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

再进行配置即可

  plugins:[new HtmlWebpackPlugin()],

所以这时候再执行打包命令,可以看到输出文件夹下还多了一个index.html

这个HTML的标题默认为Webpack App

我们也可以对这个进行配置

兼容低版本浏览器

要让新的JavaScript的特性兼容低版本的浏览器,需要用到babel,而webpack也支持相应的loader

所以首先还是安装

npm add --dev babel-loader @babel/core @babel/preset-env

这三个包提供了我们需要的功能

然后再进行下面的配置

{test: /\.js$/,exclude: /node_modules/,use: {loader: "babel-loader",options: {presets: ["@babel/preset-env"],},},
},

压缩打包后的js代码

同样是两步,先安装

npm add --dev terser-webpack-plugin

然后引入和配置

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

  optimization: {minimize: true,minimizer: [new TerserPlugin()],},

无需执行命令自动打包

现在每次修改了代码后都得重新执行打包命令

webpack也提供了一个插件能在保存后自动打包

还是先安装

npm add --dev webpack-dev-server

然后先在webpack.config.js中进行配置

  devServer: {static: "./dist",},

再在package.json中进行配置

  "scripts": {"start": "webpack serve --open"},

这样在我们执行npm start的时候就会自动执行webpack serve

并且通过 npm start 打开的网页能在我们修改保存后自动刷新页面

避免浏览器缓存js文件

由于现在每次生成的文件名都是dist.js,所以浏览器会对这个文件进行缓存,进而不更新

为了避免进行缓存,可以给文件名添加一段随机的字符,每次更新后都生成新的随机字符

所以在webpack.config.js中配置输出即可

output: {filename: "[name].[contenthash].js",path: path.resolve(__dirname, "dist"),},

配置可视化打包工具

这是一个帮助分析的工具,它会可视化地展现打包过程中哪个文件占的体积比较大

所以同样的,先是安装这个插件

npm add --dev webpack-bundle-analyzer

接着在配置中引入这个插件

const BundleAnalyzerPlugin = require("webpack-bundle-analyzer");

以及在plugins中添加它

  plugins: [new HtmlWebpackPlugin({title: "test",}),new BundleAnalyzerPlugin.BundleAnalyzerPlugin()],

所以此时再运行npx webpack

自动跳出了这样的文件分析图


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

相关文章

在Ubuntu 18.04上安装Nginx的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 介绍 Nginx 是世界上最流行的 Web 服务器之一&#xff0c;负责托管互联网上一些最大和最高流量的网站。在大多数情况下&#xff0c;它比…

OpenHarmony鸿蒙开发( Beta5.0)智能手表应用开发实践

样例简介 本项目是基于BearPi套件开发的智能儿童手表系统&#xff0c;该系统通过与GSM模块&#xff08;型号&#xff1a;SIM808&#xff09;的通信来实现通话和定位功能。 智能儿童手表系统可以通过云和手机建立连接&#xff0c;同步时间和获取天气信息&#xff0c;通过手机下…

Redis缓存预热方案详解:提升应用性能与用户体验

文章目录 引言1. 为什么需要缓存预热&#xff1f;2. 缓存预热的基本原理2.1 数据选择2.2 加载策略 3. Redis缓存预热方案设计3.1 方案概述3.2 数据选择3.3 加载策略3.4 实现方式 4. 测试与监控4.1 单元测试4.2 监控 5. 总结 引言 在现代Web应用中&#xff0c;缓存技术已经成为…

云原生之WEB应用服务器Tomcat(持续更新中)

WEB应用服务器Tomcat 1.Tomcat功能介绍1.1 安装Tomcat1.2 生成启动文件 2.结合反向代理实现Tomcat部署2.1 利用nginx反向代理实现 3.Memcached&#xff08;解决sion丢失问题&#xff09;3.1 简介3.2 安装与启动 4.session 共享服务器 1.Tomcat功能介绍 Tomcat 服务器是一个免费…

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes

论文精读-Supervised Raw Video Denoising with a Benchmark Dataset on Dynamic Scenes 优势 1、构建了一个用于监督原始视频去噪的基准数据集。为了多次捕捉瞬间&#xff0c;我们手动为对象s创建运动。在高ISO模式下捕获每一时刻的噪声帧&#xff0c;并通过对多个噪声帧进行…

[数据集][目标检测]井盖丢失未盖破损检测数据集VOC+YOLO格式2890张5类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2890 标注数量(xml文件个数)&#xff1a;2890 标注数量(txt文件个数)&#xff1a;2890 标注…

使用Nginx获取客户端真实IP(real_ip_header)

使用 Nginx 获取客户端真实 IP 在使用 Nginx 作为反向代理或负载均衡器时&#xff0c;我们常常需要获取客户端的真实 IP 地址。然而&#xff0c;默认情况下&#xff0c;Nginx 的 $remote_addr 变量记录的 IP 地址可能是上游代理或负载均衡器的 IP&#xff0c;而非实际客户端的…

MySQL · 性能优化 · 提高查询效率的实用指南(上)

前言 在过去的几年里&#xff0c;MySQL作为一款开源数据库&#xff0c;因其稳定性和性能得到了广泛的应用。始终保持着强劲的增长趋势&#xff0c;越来越多的企业和开发者将其作为首选数据库&#xff0c;甚至有部分企业从Oracle迁移至MySQL。然而&#xff0c;随着使用的普及&a…

Django中的第一个自动化测试编写

跟着Django官网中的投票应用学习&#xff0c;其中有官方说明的一个bug:如果 Question 是在一天之内发布的&#xff0c;那么这个Question 应该显示“published_recently”&#xff0c;返回值为True &#xff0c;然而现在如果问题发布时间为30天之后(未来时间)&#xff0c;也会返…

防封!数字人直播防封!铭顺科技AI数智人抖音直播防封落地方案!!

数字人直播防不防封&#xff1f; 数字人直播有没有流量&#xff1f; 数字人直播能不能落地&#xff1f; 这是目前所有想入局AI数字人赛道、想用数字人直播、想做数字人项目的老板们最担心、最关心的问题&#xff01;但是&#xff0c;同行友商对此都噤若寒蝉&#xff0c;不敢跟…

手机同时传输USB功能与充电的实现及LDR6500的作用

在智能设备日益普及的今天&#xff0c;用户对于手机的功能需求愈发多样化&#xff0c;其中同时实现USB数据传输与充电功能成为了许多用户的迫切需求。这一功能的实现离不开先进的硬件技术和创新的芯片解决方案&#xff0c;而LDR6500正是这样一款能够满足这一需求的USB PD&#…

Spark与Kafka进行连接

在Java中使用Spark与Kafka进行连接&#xff0c;你可以使用Spark Streaming来处理实时流数据。以下是一个简单的示例&#xff0c;展示了如何使用Spark Streaming从Kafka读取数据并进行处理。 1. 引入依赖 首先&#xff0c;在你的pom.xml文件中添加必要的依赖项&#xff08;假设…

nginx配置负载均衡的几种方式

1&#xff0c;轮询&#xff08;默认&#xff09; 每个请求按时间顺序逐一分配到不同的后端服务器&#xff0c;如果后端服务器 down掉&#xff0c;能自动剔除。 # 反向代理配置upstream server_list{# 这个是tomcat的访问路径server localhost:8080;server localhost:9999;}serv…

八股集合1

在HTTPS中&#xff0c;加密方法主要包括两种类型的加密技术&#xff1a;非对称加密&#xff08;也称为公钥加密&#xff09;和对称加密。这两种加密技术在HTTPS握手过程中协同工作&#xff0c;确保数据的安全传输。下面是具体的加密方法及其作用&#xff1a; 公钥加密 (非对称…

无人机飞控之光流知识小结

要完成飞行器的定位&#xff0c;则必须要有位置的反馈数据。在户外&#xff0c;我们一般使用GPS作为位置传感器&#xff0c;然而&#xff0c;在室内&#xff0c;GPS无法使用&#xff0c;要完成定位功能&#xff0c;可以选用光流传感器。 本讲主要介绍如何通过下视摄像头估计飞…

K12智慧校园云平台源码,智慧校园小程序源码,支持PC+小程序,提供丰富的API接口,支持和其他系统的融合对接

智慧校园平台是目前教育信息化领域的热点之一。随着数字化转型的加速&#xff0c;越来越多的学校开始寻求解决方案&#xff0c;以提高教育管理的效率和质量。 智慧校园电子班牌系统是一种集成信息化技术、物联网、智能化的教育管理解决方案&#xff0c;它在校园内实现了信息共…

四个pdf软件分享,你更爱哪一款?

如果说现在用的最多的电子文档是什么&#xff0c;不是Word就是PDF&#xff0c;所以PDF编辑器几乎成了我们日常工作中不可或缺的工具。但面对市面上琳琅满目的PDF编辑器&#xff0c;到底哪一款才是你的菜呢&#xff1f;今天&#xff0c;我就来和大家聊聊我用过的四款编辑器&…

【重学 MySQL】十六、算术运算符的使用

【重学 MySQL】十六、算术运算符的使用 加法 ()减法 (-)乘法 (*)除法 (/ 或 div )取模&#xff08;求余数&#xff09; (% 或 mod )注意事项 在 MySQL 中&#xff0c;算术运算符用于执行数学运算&#xff0c;如加法、减法、乘法、除法和取模&#xff08;求余数&#xff09;等。…

Html、Css3动画效果

文章目录 第九章 动画9.1 transform动画9.2 transition过渡动画9.3 定义动画 第九章 动画 9.1 transform动画 transform 2D变形 translate()&#xff1a;平移函数&#xff0c;基于X、Y坐标重新定位元素的位置 scale()&#xff1a;缩放函数&#xff0c;可以使任意元素对象尺…

选择服务器机柜租用要注意哪些方面?

企业在进行选择服务器租用和托管后&#xff0c;大多数的企业会选择租用服务器机柜来进行放置&#xff0c;同时机房中也有着不同款式的机柜&#xff0c;使计算机行业中不可或缺的用品&#xff0c;那我们在选择服务器机柜租用时需要注意哪些方面呢&#xff1f; 接下来就让我们了解…