【Webpack】基本使用方法

embedded/2024/10/22 15:33:59/

📢博客主页:逆旅行天涯-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/embedded/108737.html

相关文章

HTTP 一、基础知识

一、概述 1、概述 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff1a; 全称超文本传输协议&#xff0c;是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。HTTP 是一种应用层协议&#xff0c;是基于 …

ubuntu16.04 vim使用中文出现乱编文档处理

问题现象 vim 编译文件时出现乱码问题 解决方法 1. 中文语言包安装: apt-get install language-pack-zh-hans 2. 配置环境变量:echo "export LC_ALLzh_CN.UTF-8" >>/etc/bash.bashrc 3. 修改当前环境的字符集 /etc/default/locale cat /etc/default/locale…

channel

文章目录 channel1.channe的数据结构2.channel的操作1.channel写入2.channel读取 selelect 面试题1.channel是线程安全的吗&#xff1f;为什么&#xff1f;2.channel的底层实现原理3.对channel进行读写关闭操作&#xff1f; 算法题1.select中case的使用2.有4个goroutine&#x…

【MySQL】MySQL Workbench下载安装、环境变量配置、基本MySQL语句、新建Connection

1.MySQL Workbench 下载安装&#xff1a; 进入网址&#xff1a;MySQL :: MySQL Workbench Manual :: 2 Installation &#xff08;1&#xff09;点击“MySQL Workbench on Windows”&#xff08;下载Windows版本&#xff09;&#xff08;2&#xff09;点击“Installing” &…

压缩文件隐写

1、伪加密 &#xff08;1&#xff09;zip伪加密 考点&#xff1a;winhex打开压缩包&#xff1b;搜索504b0102(注意不是文件头部&#xff1b;zip文件头部伪504b0304);从50开始&#xff0c;往后面数第9&#xff0c;10个字符为加密字符&#xff0c;将其设置为0000即可变为无加密状…

代码随想录 刷题记录-27 图论 (4)拓扑排序

一、拓扑排序精讲 题目&#xff1a;117. 软件构建 拓扑排序的背景 本题是拓扑排序的经典题目。 拓扑排序是经典的图论问题。 先说说 拓扑排序的应用场景。 大学排课&#xff0c;例如 先上A课&#xff0c;才能上B课&#xff0c;上了B课才能上C课&#xff0c;上了A课才能上…

2024国赛数学建模备战:灰色预测,国赛数学建模思路代码 模型

2024国赛数学建模ABC题思路模型代码&#xff1a;文末获取&#xff0c;9.5开赛后第一时间更新 许久未更新时间序列分析系列内容。现先推出一期灰色预测 GM(1,1)模型的内容。需明确的是&#xff0c;灰色预测并非典型的时间序列分析方法&#xff0c;然而&#xff0c;它可以应用于…

服务器频频被黑,如何做好安全防护

服务器频频被黑&#xff0c;如何做好安全防护?在数字化时代&#xff0c;服务器作为企业的核心数据资产&#xff0c;其安全性直接关系到企业的生死存亡。随着网络攻击手段的不断升级&#xff0c;服务器频频被入侵的事件屡见不鲜&#xff0c;给企业带来了巨大的损失和风险。如何…