前端自动化工程
1、打包工具
- Grunt
- Gulp
- webpack
- vite(vue3,react)
2、模块化处理
1)、AMD
浏览器异步加载方案。
实现者:requireJS
2)、CMD
浏览器异步加载方案。
实现者:seaJS
3)、CommonJS
服务器端同步加载方案。
实现者:NodeJS
4)、ES6
3、webpack
当下最热门的资源模块管理和打包工具。
4、环境配置
bash
# 全局安装的 webpack 工具
npm i webpack-cli -g
# 本地环境
npm i -D webpack webpack-cli
5、配置文件
项目根目录下创建 webpack.config.js
文件
webpack 配置
1、entry
起点或是应用程序的起点入口。
js
entry: {
home: "./home.js",
about: "./about.js",
contact: "./contact.js"
}
2、output
项目输出设置
js
// 对于单个入口起点,filename 会是一个静态名称。
filename: "bundle.js"
// 使用入口名称
filename: "[name].bundle.js"
// 使用每次构建过程中,唯一的 hash 生成
filename: "[name].[hash].bundle.js"
3、mode
告知 webpack 使用相应模式的内置优化。
bash
WARNING:The 'mode' option has not been set...
node src/index.js
mode: 'development', // 模式
4、module
主要用于定义对模块的处理逻辑。
webpack 本身只能处理 js 模块,但是可以通过 loader 转换器将各种资源转化为 js 模块,这样所有的资源都可以被 webpack 处理。
1)、css 处理
js
// 安装
npm i -D css-loader style-loader
* css-loader:解析 css 文件路径
* style-loader:用于把 css 解析到 html 的 style 中
// 配置
module: {
rules: [
{
test: /\.css$/, // 匹配要处理的文件
use: ['style-loader','css-loader'], // 使用哪些 loader 来处理这些文件,loader 处理顺序从右往左执行的
include: '', // 只匹配这个目录
exclude: '', // 排除这些目录
}
]
}
2)、sass 处理
js
// 安装
npm i -D sass-loader sass
// 配置
在 css 配置基础上再加。
module: {
rules: [
{
test: /\.(scss|css)$/,
use: ['style-loader','css-loader','sass-loader'],
}
]
}
3)、图片字体处理
js
// 安装
npm i -D url-loader file-loader
// 配置
module: {
rules: [
{
test: /\.(png|jpg|gif|webp|jpeg|svg|eot|ttf|woff|woff2)$/,
use: {
loader: 'url-loader',
options: { // loader 配置
limit: 8192, // 超过指定大小的图片需要 file-loader 做路径处理
name: '[name].[hash:8].[ext]',
esModule: false // 可以允许在标签属性上使用 require 动态加载
}
},
exclude: /node_modules/
}
]
}
4)、js / react 处理
js
// 安装
npm install -D babel-loader @babel/core @babel/preset-env @babel/preset-react @babel/plugin-proposal-class-properties @babel/plugin-transform-runtime
// 配置
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/, // 排除 node_modules 文件夹
loader: 'babel-loader', //注意 webpack2.x 是不支持 loader 简写
options: { // loader的可选项
presets: ['@babel/preset-env', '@babel/preset-react'],
plugins: [
['@babel/plugin-transform-runtime', { "corejs": 3 }],
["@babel/plugin-proposal-class-properties", { "loose": true }]
]
}
}
]
}
5、plugins
插件。
1)、html-webpack-plugin
js
// 安装
npm i -D html-webpack-plugin
// 配置
{
...
plugins: [
new HtmlPlugin()
]
}
6、devServer
配置本地服务器。
js
// 安装
npm i -D webpack-dev-server
// 配置
devServer: {
contentBase: path.join(__dirname, "dist"),
historyApiFallback: true, // 任意的404 响应都会被替换为 index.html
compress: true, // 开启 Gzip 压缩
port: 8000, // 端口号
open: true, // 是否自动打开浏览器
hot: true, // 热加载
prot: { // 反向代理,解决开发时的跨域
}
}
7、resolve
js
resolve: {
extensions: ['.js', '.jsx', '.vue'], // 导入这些文件时可以省略后缀
alias: { // 路径别名
'@': path.resolve(__dirname, 'src')
}
}