webpack
前端工程化
- 模块化
- js模块化
- css模块化
- 资源模块化
- 组件化
- 复用UI结构、样式、行为
- 规范化
- 目录结构划分
- 编码规范化
- 接口规范化
- 文档规范化
- git分支管理
- 自动化
- 自动化构建
- 自动部署
- 自动化测试
标准化企业级项目开发过程:工具、技术、流程、经验
grunt gulp => webpack(主) parcel => vite
webpack
前端项目工程化
- 代码压缩混淆
- 处理JavaScript兼容性
- 性能优化
安装webpack
npm i webpack webpack-cli -D
配置webpack
在webpack.config.js文件内
保存webpack的打包设定
1 | // 导入 path 包 |
在package.json文件内
1 | "scripts": { |
使用webpack
npm run dev
webpack-dev-server
实时更新修改文件,从而能够随时观察编辑效果
实际搭建一个本地服务器,把实时改变的文件放在内存内,以加快访问速度
安装
npm i webpack-dev-server -D
修改 package.json 文件如下:
1
2
3"scripts": {
"dev": "webpack serve"
}可通过
npm run dev
编译
配置 webpack.config.js
1 | { |
html-webpack-plugin
编译时实时移动 html 文件至项目根目录
自动注入项目打包后的 js 文件和其他文件
- 安装
npm i html-webpack-plugin -D
- 配置 webpack.config.js
1 | // 导入 HtmlPlugin 包 |
loader
由于 webpack 仅可处理 js 及 json 文件
加载器:协助 webpack 处理特定的文件模块
- css-loader 处理 css 文件
- less-loader 处理 less 文件
- babel-loader 处理高级 js 语法
CSS-loader
协助处理 css 文件
安装
npm i style-loader css-loader -D
配置 webpack.config.js 内的 module 选项
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18{
// 第三方模块的匹配规则
module: {
// 规则数组
rules: [
{
// 正则表达式匹配的文件类型
test: /\.css$/,
// 使用的 loader
// 特别的: loader 中的顺序不可交换,会按从后往前的顺序调用
use: [
'style-loader',
'css-loader',
],
}
],
},
}在 index.js 中导入 css 文件
import './css/index.css';
less-loader
协助处理 less 文件
安装
npm i less less-loader -D
配置 webpack.config.js 内的 module 选项
1
2
3
4
5
6
7
8
9
10
11
12
13
14{
module: {
rules: [
{
test: /\.less$/,
use: [
'style-loader',
'css-loader',
'less-loader',
],
},
],
},
}在 index.js 中导入 less 文件
import './css/index.less';
url-loader&file-loader
协助处理图片
会把给定限制大小下的图片转为base64编码,否则仍使用url导入的方式
安装
npm i url-loader file-loader -D
配置 webpack.config.js 内的 module 选项
1
2
3
4
5
6
7
8
9
10
11{
module: {
rules: [
{
test: /\.jpg|png|gif$/,
// limit 指定转换图片的阈值
use: 'url-loader?limit=8192',
},
],
},
}在 index.js 中导入图片
import logo from './images/icon.png';
给img标签赋值
$('#img').attr('src', logo);
babel-loader
安装
npm i babel-loader @babel/core @babel/plugin-proposal-decorators -D
配置 webpack.config.js 内的 module 选项
1
2
3
4
5
6
7
8
9
10
11{
module: {
rules: [
{
test: /\.js$/,
use: 'babel-loader',
exclude: /node_modules/,
},
],
},
}配置 babel.config.js
1
2
3
4
5
6
7
8
9
10module.exports = {
plugins: [
[
'@babel/plugin-proposal-decorators',
{
legacy: true,
},
],
],
}
打包发布
package.json 配置
1 | "scripts": { |
优化js路径
1 | output: { |
优化img路径
1 | { |
配置清理 dist 目录 clean-webpack-plugin
安装
npm i clean-webpack-plugin -D
导入与配置 webpack.config.js
const {CleanWebpackPlugin} = require('clean-webpack-plugin');
1
2
3
4
5
6
7plugins: [
new HtmlPlugin({
template: './src/index.html',
filename: './index.html',
}),
new CleanWebpackPlugin(),
],
Source Map
信息文件,保存打包前代码的详细位置信息
webpack.config.js 添加 devTools: 'eval-source-map'
选项
建议发布时去除 source map 选项
只定位行号,不暴露源码:nosources-source-map
设定
定位行号且暴露源码:source-map
会生成一个独立文件
使用@导入文件
- 配置
1 | resolve: { |
- 使用
import msg from '@/msg.js';