Vue3基础之Webpack

Webpack是一个模块化打包工具,可以将互相依赖的HTML、CSS、Js或是图片字体等经过一些列处理,打包成静态的前端项目

可以将项目中的所有模块打包成一个或多个包,只在需要时进行加载,支持热模块替换,可以压缩打包后的代码,在开发过程中,当发生代码变化时,可以实时更新浏览器中的模块,拥有广泛的插件生态系统

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

npm init -y 初始化

npm add webpack-cli --dev 安装到开发者环境中

使用npx webpack打包

webpack配置

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

进行配置

const path = require("path");

module.exports = {

mode: "development",

entry: "./src/index.js",

output: {

filename: "dist.js",

path: path.resolve(__dirname,"dist"),

}

}

mode为开发者模式

entry选择与config文件的src目录中下index.js作为入口文件

output为配置输出名字

打包css文件与图片

需要安装

npm add --dev style-loader css-loader

自动生成html文件

npm add html-webpack-plugin --dev

兼容低版本浏览器

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

压缩打包之后的js代码

npm add --dev terser-webpack-plugin

无需命令自动打包

npm add --dev webpack-dev-server

还需要再package.json中添加

"scripts": {

"start": "webpack serve --open"

},

避免浏览器缓存js文件,我们可以给生成的文件修改文件名

配置可视化打包工具

npm add --dev webpack-bundle-analyzer

出现的文件分析图为

整体的配置文件webpack.config.js为

const path = require("path");

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

const TerserPlugin = require("terser-webpack-plugin"); // 修正了这里,原名为 TerserPlugon,应为 TerserPlugin

const { Static } = require("vue"); // 这一行在这里没有被使用,可以移除

const BundleAnalyzerPlugin = require("webpack-bundle-analyzer"); // 修正了这里,原名为 BundelAnalyzerPlugin

module.exports = {

// 指定构建模式为 development(开发模式),这会影响资源的优化和压缩等

mode: "development",

// 指定应用的入口文件

entry: './src/index.js',

// 配置 source map,这里使用的是 inline-source-map,源代码和 source map 会在同一个文件中

devtool: "inline-source-map",

// 输出配置

output: {

// 输出文件的名称,[name] 是占位符,代表 entry 中的名称,[contenthash] 是文件内容的哈希值

filename: '[name].[contenthash].js',

// 输出文件的目录

path: path.resolve(__dirname, "dist")

},

// 优化配置

optimization: {

// 是否启用压缩

minimize: true,

// 压缩器配置,这里使用了 TerserPlugin 来压缩 JavaScript 文件

minimizer: [new TerserPlugin()]

},

// 开发服务器配置

devServer: {

// 静态资源服务路径

static: './dist'

},

// 解析配置

resolve: {

// 设置别名,这里为 'utils' 设置了一个别名,指向 src/utils 目录

alias: {

utils: path.resolve(__dirname, "src/utils")

}

},

// 模块配置

module: {

// 模块规则,用于处理不同文件类型的加载器

rules: [

// 处理 CSS 文件的规则

{

test: /\.css$/i,

use: ["style-loader", "css-loader"]

},

// 处理图片文件的规则

{

test: /\.(png|svg|jpg|jpeg|gif)$/i,

type: "asset/resource"

},

// 处理 JavaScript 文件的规则

{

test: /\.js$/,

exclude: /node_modules/, // 排除 node_modules 目录

use: {

loader: "babel-loader",

options: {

presets: ["@babel/preset-env"] // Babel 预设,用于转译 ES6+ 代码为 ES5

}

}

}

]

},

// 插件配置

plugins: [

// HtmlWebpackPlugin 插件,用于自动生成 HTML 文件

new HtmlWebpackPlugin({

title: "博客列表"

}),

// BundleAnalyzerPlugin 插件,用于分析打包后的文件大小和依赖关系

new BundleAnalyzerPlugin.BundleAnalyzerPlugin()

]

};

之后,项目就能正确运行或是部署在服务器中

Loader

sytle-loader将css文件处理之后插入到HEAD中

css-loader将css处理为webpack能处理的类型

sass-loader、less-loader将sass与less转化为css

file-loader打包图片与文字

Plugin

HtmlWebpackPlugin 自动创建html5文件,将打包之后的js注入进去

TerserPlugin,压缩js代码

BundleAnalyzerPlugin 提供可视化的文件大小与依赖的界面

相关推荐
Book_熬夜!9 分钟前
CSS—补充:CSS计数器、单位、@media媒体查询
前端·css·html·媒体
几度泥的菜花1 小时前
如何禁用移动端页面的多点触控和手势缩放
前端·javascript
狼性书生1 小时前
electron + vue3 + vite 渲染进程到主进程的双向通信
前端·javascript·electron
肥肠可耐的西西公主1 小时前
前端(AJAX)学习笔记(CLASS 4):进阶
前端·笔记·学习
拉不动的猪1 小时前
Node.js(Express)
前端·javascript·面试
Re.不晚2 小时前
Web前端开发——HTML基础下
前端·javascript·html
几何心凉2 小时前
如何处理前端表单验证,确保用户输入合法?
前端·css·前端框架
浪遏2 小时前
面试官😏: 讲一下事件循环 ,顺便做道题🤪
前端·面试
Joeysoda2 小时前
JavaEE进阶(2) Spring Web MVC: Session 和 Cookie
java·前端·网络·spring·java-ee
小周同学:3 小时前
npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
前端·npm·node.js