webpack 的作用 🔗
在传统的 web 开发项目中,需要引入大量的 js 文件和 css 文件等, 可能出现命名冲突,页面体积变大。webpack 把模块化的代码转化为浏览器可执行的代码。
实践 🔗
创建一个前端项目 🔗
mkdir webpack_startup && cd webpack_startup
yarn init -y 生成的 package json 文件内容取默认值。
yarn add webpack webpack-cli --dev 将依赖安装到开发环境依赖下。因为 webpack 只会在开发过程中用到,在运行时不会用到。
用 vscode 打开,新建 src 目录和 index.html(html:5 快速生成 html)。
npx webpack 打包命令, 生成 dist 目录多了 main.js 文件。
webpack 配置文件 🔗
新建 webpack.config.js 配置文件, 运行在 node.js 环境下,可以直接使用 path 之类的 node.js 内置模块。
css 部分 🔗
yarn add --dev style-loader css-loader
在 webpack.config.js 中配置
module: {
rules: [
{
test: /\.css$/i,
use: ['style-loader', 'css-loader'],
}
]
}
加载图片 🔗
在 webpack.config.js 中配置
module: {
rules: [
{
test: /\.(png|svg|jpg|jpeg|gif)$/i,
type: 'asset/resource',
}
]
}
在 webpack 中使用插件, 例如自动生成 html 文件 🔗
yarn add html-webpack-plugin --dev
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
plugins: [new HtmlWebpackPlugin()],
};
兼容低版本的浏览器 🔗
安装 babel loader,yarn add --dev babel-loader @babel/core @babel/preset-env
添加 webpack.config.js 中添加配置
module.exports = {
module: {
rules: [
{
test: /\.m?js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
}
结果文件压缩 🔗
安装插件,yarn add --dev terser-webpack-plugin
修改配置。
const TerserPlugin = require("terser-webpack-plugin");
module.exports = {
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
extractComments: false,
}),
],
},
};
修改时自动打包并刷新页面 🔗
安装依赖,yarn add --dev webpack-dev-server。
修改 webpack.config.js 文件
module.exports = {
devServer: {
static: "./dist",
open: true,
hot: true,
},
};
在 package.json 添加
"scripts": {
"start": "webpack serve --open",
}
执行 yarn start 即可。
给目录设置别名 🔗
module.exports = {
resolve: {
alias: {
utils: path.resolve(__dirname, "src/utils"),
},
},
};
分析结果文件大小 🔗
yarn add --dev webpack-bundle-analyzer
const BundleAnalyzerPlugin =
require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
module.exports = {
plugins: [new BundleAnalyzerPlugin()],
};