安装 webpack
- 初始化 package.json
生成基础 package.json
下载依赖包
1
| npm i webpack webpack-cli -D
|
启用 webpack
1
| npx webpack ./src/main.js --mode=development
|
1
| npx webpack ./src/main.js --mode=production
|
基本配置
entry(入口)
指示 Webpack 从那个文件开始打包
output(输出)
指示 Webpack 打包完成的文件输出到哪,如何命名。
loader(加载器)
webpack 本身只处理 js、json 等资源,其他资源需要借助 loader 才能解析。
plugins(插件)
扩展 webpack 功能
mode(模式)
两种模式: - 开发模式:development - 生产模式:production
Webpack 配置文件
在根目录创建 webpack.config.js
基本格式为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| const path = require("path"); module.exports = { entry: "./src/index.js", output: { path: path.resolve(__dirname, "dist"), filename: "main.js", clean: true, }, module: { rules: [ ], }, plugins: [ ], mode: "development", };
|
处理样式资源
css 处理
安装 loader
npm i style-loader less-loader less -D
将 loader 引入配置文件在官网文档找到 loder
1 2 3 4 5 6 7 8 9 10 11
| module: { rules: [ { test: /\.css$/i, use: [ "style-loader", "css-loader", ], }, ], },
|
处理 less
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| module: { rules: [ { test: /\.css$/i, use: [ "style-loader", "css-loader", ], },{ test: /\.less$/, use: [{ loader: "style-loader" }, { loader: "css-loader" }, { loader: "less-loader" }] } ], },
|
其他的配置基本一致
处理图片资源
将小于 10kb 的图片转为 base64 格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| module: { rules: [ { test: /\.css$/i, use: [ "style-loader", "css-loader", ], },{ test: /\.less$/, use: [{ loader: "style-loader" }, { loader: "css-loader" }, { loader: "less-loader" }] },{ test: /\.(png|jpe?g|gif|webp|svg)$/, type: "asset", parser: { dataUrlCondition: { maxSize: 10 * 1024, } } } ], },
|
修改输出目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| output: { path: path.resolve(__dirname,"dist"), filename: "static/js/main.js" } module: { rules: [ { test: /\.css$/i, use: [ "style-loader", "css-loader", ], },{ test: /\.less$/, use: [{ loader: "style-loader" }, { loader: "css-loader" }, { loader: "less-loader" }] },{ test: /\.(png|jpe?g|gif|webp|svg)$/, type: "asset", parser: { dataUrlCondition: { maxSize: 10 * 1024, } }, generator: { filename: "static/images/[hash:10][ext][query]" } }, { test: /\.(ttf|woff2?)$/, type: "asset/resource", generator: { filename: "static/media/[hash:10][ext][query]" } } ], },
|
xxxxxxxxxx1 1this.$store.commit(“person/fn”, value); //斜杠前为命名空间,斜杠后为方法名javascript
.eslintrc.js
配置文件
1 2 3 4 5 6 7 8 9 10 11 12
| module.exports = { parserOptions: { ecmaVersion: 6, sourceType: "module", ecmaFeatures: { jsx: true, }, }, rules: {}, extends: [], };
|
安装 eslint 与配置
1
| npm i eslint eslint-webpack-plugin -D
|
将插件添加进 webpack 配置
1 2 3 4 5 6 7 8
| const ESLintPlugin = require("eslint-webpack-plugin"); module.exports = { plugins: [ new ESLintPlugin({ context: path.resolve(__dirname, "src"), }), ], };
|
根目录添加.eslintrc.js
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| module.exports = { parserOptions: { ecmaVersion: 6, sourceType: "module", ecmaFeatures: { jsx: true, }, }, rules: {}, extends: [exlint:recommended], env:{ node: true, browser: true } };
|
根目录添加.eslintignore
文件,用于忽略检查的文件写入
代表忽略 dist 文件夹的语法检查
Babel
文档中可查阅相关配置根目录创建babel.config.js
文件用于将 ES6 语法编写的代码转换为向后兼容的 JavaScript 语法,以运行在当前和旧版本的浏览器或其他环境中。
1 2 3
| module.exports = { preset: [], };
|
安装与配置
webpack 3.x | babel-loader 8.x | babel 7.x
1
| npm install babel-loader@8.0.0-beta.0 @babel/core @babel/preset-env webpack
|
webpack 3.x babel-loader 7.x | babel 6.x
1
| npm install babel-loader babel-core babel-preset-env webpack
|
在 webpack 配置文件的 rules 中添加
1 2 3 4 5 6 7
| { test: /\.js$/, exclude: /node_modules/, use: { loader: 'babel-loader', } }
|
在babel.config.js
文件中添加
1 2 3
| module.exports = { preset: ["@babel/preset-env"], };
|
处理 html 资源
文档
1
| npm install --save-dev html-webpack-plugin
|
在 webpack 配置文件中
1 2 3 4 5 6 7 8
| const HtmlWebpackPlugin = require("html-webpack-plugin"); plugins: [ new HtmlWebpackPlugin({ template: path.resolve(__dirname, "publich/index.html"), }), ];
|
搭建开发服务器
文档下载包:
1
| npm i wenpack-dev-server -D
|
webpack 中添加新的属性
1 2 3 4 5
| devServer: { host: "localhost", port: "3000", open: true }
|
运行npx webpack server
可运行服务器
生产模式准备
创建 config 文件夹在 config 文件夹内创建webpack.dev.js
与webpack.prod.js
文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| output:{ path: undefind, filename: "static/js/main.js" } plugins: [ new ESLintPlugin({ context: path.resolve(__dirname, "../src"), }), new HtmlWebpackPlugin({ template: path.resolve(__dirname, "../publich/index.html"), }), ],
|
运行npx webpack serve --config ./config/webpack.dev.js
指运行开发模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| output:{ path: path.resolve(__dirname,"../dist"), filename: "static/js/main.js", clear: true } plugins: [ new ESLintPlugin({ context: path.resolve(__dirname, "../src"), }), new HtmlWebpackPlugin({ template: path.resolve(__dirname, "../publich/index.html"), }), ],
mode: "production"
|
运行npx webpack serve --config ./config/webpack.dev.js
指定运行生产模式
在package.json
中,找到 scripts 项添加:
1 2 3
| "start": "npm run dev" "dev": "webpack serve --config ./config/webpack.dev.js", "build": "webpack --config ./config/webpack.prod.js"
|
运行开发模式:npm start
生产模式:npm run build
提取 css 为单独文件
文档安装插件npm install -D mini-css-extract-plugin
导入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| const MiniCssExtractPlugin = require("mini-css-extract-plugin");
plugins: [new MiniCssExtractPlugin({ filename: "static/css/main.css" })], module: { rules: [ { test: /\.css$/i, use: [ MiniCssExtractPlugin.loader, "css-loader" ], }, ], },
|
样式兼容性
文档安装包:
1
| npm install -D postcss-loader postcss postcss-preset-env
|
配置写在 css 后,less 前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| module: { rules: [ { test: /\.css$/i, use: [ MiniCssExtractPlugin.loader, "css-loader", { loader: 'postcss-loader', options: { postcssOptions: { plugins: [ [ 'postcss-preset-env', ], ], }, }, }, ], },{ test: /\.less$/, use: [ MiniCssExtractPlugin.loader, "css-loader", { loader: 'postcss-loader', options: { postcssOptions: { plugins: [ [ 'postcss-preset-env', ], ], }, }, }, "less-loader", ] } ], },
|
兼容性程度设置:在 package.json 中,最后面添加 browserslist 属性
1 2 3 4 5
| "browserslist":[ "last 2 version", "> 1%", "not dead" ]
|
封装样式 loader 函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| function getStyleLoader(pre) { return [ MiniCssExtractPlugin.loader, "css-loader", { loader: 'postcss-loader', options: { postcssOptions: { plugins: [ [ 'postcss-preset-env', ], ], }, }, }, pre, ].filter(Boolean); }
module: { rules: [ { test: /\.css$/i, use: getStyleLoader(), },{ test: /\.less$/, use: getStyleLoader('less-loader'), } ], },
|
css 压缩
文档安装包
1
| npm install css-minimizer-webpack-plugin -D
|
1 2 3
| const MiniCssExtractPlugin = require("mini-css-extract-plugin"); const CssMinimizerPlugin = require("css-minimizer-webpack-plugin"); plugins: [new MiniCssExtractPlugin()];
|