webpack5 学习手册
1. 初始化 webpack 项目 npm init -y (初始化一个 package.json 文件)
2. npm i webpack webpack-cli -D 下载这两个依赖包
3. npx webpack ./src/main.js --mode development //【 入口文件 打包模式 】 npx webpack 指令
// npx webpack ./src/main.js --mode production // 生产环境
4. 当你的项目下创建了 webpack.config.js 并在里面配置了相应 可以直接npx webpack 即可运行打包;【同3的升级版】
5. 配置css 规则
npm install style-loader css-loader --save-dev
{
test: /\.css$/,
use: [
//执行顺序,从左到右 (从上到下)
"style-loader", //将js中的css创建style属性添加到html中生效
"css-loader", //将css资源编译成commonjs的模块到js中
],
},
6. npm install --save-dev html-webpack-plugin
plugins: [new HtmlWebpackPlugin()],
7. npm install --save-dev webpack-dev-server 执行 npx webpack serve //开发环境 修改自动打包
devServer: {
static: {
directory: path.join(__dirname, "public"),
},
compress: true,
port: 9000,
},
8. 为了配置 开发环境与生产环境的config 新建目录config 创建创建 webpack.config.dev.js webpack.config.prod.js
执行 npx webpack serve --config ./config/webpack.config.dev.js 就可以启动开发环境
同理: npx webpack --config ./config/webpack.config.prod.js 打包生产环境资源
9. 在package.json 配置
"scripts": {
"dev": "webpack serve --config ./config/webpack.config.dev.js",
"build": "webpack --config ./config/webpack.config.prod.js"
},
启动开发环境 :npm run dev
打包生产环境:npm run build
10. npm install --save-dev mini-css-extract-plugin //将 CSS 提取到单独的文件中,为每个包含 CSS 的 JS 文件创建一个 CSS 文件,并且支持 CSS 和 SourceMaps 的按需加载。
<见下面的webpack.config.prod.js>
11. npm i postcss-loader postcss postcss-preset-env -D //样式兼容性处理
注:加载器中的配置 要在css-loader下面 在less-loader sass-loader的前面
12 npm install css-minimizer-webpack-plugin --save-dev // 压缩css
13. devtool 脚本的映射
开发环境 devtool:"cheap-module-source-map" //错误只提示到行
生产环境 devtool:"source-map" //错误提示到行、列
14. 热模块替换 (开发环境)
dev-serve 设置 hot:true
15: 加载器里面 oneOf <见下面的webpack.config.prod.js>
webpack.config.prod.js:
const path = require("path"); // node 核心模块 专门处理路径问题
const HtmlWebpackPlugin = require("html-webpack-plugin");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
//封闭一个方法
function getStyleLoader(pre) {
return [
//可以使用多个loader
//执行顺序,从左到右 (从上到下)
// "style-loader", //将js中的css创建style标签添加到html中生效
MiniCssExtractPlugin.loader, //提取css成单独的文件
"css-loader", //将css资源编译成commonjs的模块到js中
{
loader: "postcss-loader",
options: {
postcssOptions: {
plugins: [
"postcss-preset-env", //能解决大多数样式兼容的问题
],
},
},
},
pre,
].filter(Boolean); //filter(undefined) 过虑掉传空的值
}
module.exports = {
//入口
entry: ["./src/main.js"], //相对路径 , "./public/index.html", "./public/test.html"
//输出
output: {
//文件的输出路径
// __dirname nodejs的变量 代表当前文件的文件夹目录
path: path.resolve(__dirname, "../dist"), //绝对路径
filename: "js/main.js", //输出到对应的目录下
clean: true, //自动清空上次打包的内容
},
//加载器
module: {
rules: [
//loader 的配置
{
oneOf: [
//只被其中一个处理
{
test: /\.css$/,
//loader:'xxx', // 只能使用一个loader
use: getStyleLoader(),
},
{
test: /\.less$/,
use: getStyleLoader("less-loader"),
// [
// MiniCssExtractPlugin.loader,
// "css-loader",
// {
// loader: "postcss-loader",
// option: {
// postcssOptions: {
// plugins: [
// "postcss-preset-env", //能解决大多数样式兼容的问题
// ],
// },
// },
// },
// "less-loader",
// ], //下载 less-loader 依赖
},
{
test: /\.sass$/,
use: getStyleLoader("sass-loader"),
// [
// MiniCssExtractPlugin.loader,
// "css-loader",
// {
// loader: "postcss-loader",
// option: {
// postcssOptions: {
// plugins: [
// "postcss-preset-env", //能解决大多数样式兼容的问题
// ],
// },
// },
// },
// "sass-loader",
// ], //下载 sass-loader 依赖
},
{
test: /\.(png|jpe?g|gif|webp|svg)$/,
type: "asset",
parser: {
dataUrlCondition: {
//小于10kb的图转化为base64
//优化 减少请求数 缺点:体积会变大一丢丢
maxSize: 10 * 1024, //10kb
},
},
generator: {
//输出图片名称
//hash:10 hash值取前10位
filename: "images/[hash:10][ext]",
},
},
],
},
],
},
//插件
plugins: [
//插件的配置
new HtmlWebpackPlugin({
//模板 以public/index.html 为模板
//新的html 文件特点 1:结构和原文一致 2.自动引入打包输出的资源
template: path.resolve(__dirname, "../public/index.html"),
}),
new MiniCssExtractPlugin({
filename: "css/main.css",
}),
new CssMinimizerPlugin(),
],
//模式
mode: "production", //production
devtool: "source-map", //错误提示到行、列
};
webpack.config.dev.js:
const path = require("path"); // node 核心模块 专门处理路径问题
const HtmlWebpackPlugin = require("html-webpack-plugin");
module.exports = {
//入口
entry: "./src/main.js", //相对路径
//输出
output: {
//文件的输出路径
// __dirname nodejs的变量 代表当前文件的文件夹目录
path: path.resolve(__dirname, "../dist"), //绝对路径
filename: "js/main.js", //输出到对应的目录下
clean: true, //自动清空上次打包的内容
},
//加载器
module: {
rules: [
//loader 的配置
{
oneOf: [
//只被其中一个处理
{
test: /\.css$/,
//loader:'xxx', // 只能使用一个loader
use: [
//可以使用多个loader
//执行顺序,从左到右 (从上到下)
"style-loader", //将js中的css创建style标签添加到html中生效
"css-loader", //将css资源编译成commonjs的模块到js中
],
},
{
test: /\.less$/,
use: ["style-loader", "css-loader", "less-loader"], //下载 less-loader 依赖
},
{
test: /\.sass$/,
use: ["style-loader", "css-loader", "sass-loader"], //下载 sass-loader 依赖
},
{
test: /\.(png|jpe?g|gif|webp|svg)$/,
type: "asset",
parser: {
dataUrlCondition: {
//小于10kb的图转化为base64
//优化 减少请求数 缺点:体积会变大一丢丢
maxSize: 10 * 1024, //10kb
},
},
generator: {
//输出图片名称
//hash:10 hash值取前10位
filename: "images/[hash:10][ext]",
},
},
],
},
],
},
//插件
plugins: [
//插件的配置
new HtmlWebpackPlugin({
//模板 以public/index.html 为模板
//新的html 文件特点 1:结构和原文一致 2.自动引入打包输出的资源
template: path.resolve(__dirname, "../public/index.html"),
}),
],
//开发服务器
devServer: {
// static: {
// directory: path.join(__dirname, "public"),
// },
host: "localhost",
compress: true,
port: 9000,
open: true,
hot: true,
},
//模式
mode: "development", //production
devtool: "cheap-module-source-map", //错误只提示到行
};

浙公网安备 33010602011771号