文章目录
- 🐰 w e b p a c k 简介 \color{red}{webpack简介} webpack简介
- 🐰 核心概念
- 🐰 处理样式资源 − c s s 、 l e s s 、 s a s s 、 s t y l u s \color{red}{处理样式资源-css、less、sass、stylus} 处理样式资源−css、less、sass、stylus
- 🐰 处理 J S − E s l i n t 、 B a b e l \color{red}{处理JS-Eslint、Babel} 处理JS−Eslint、Babel
- 🐰output 相关配置
- 开发服务devServer
- 🐰图片优化
- 🐰 生产模式配置 \color{red}{生产模式配置} 生产模式配置
- 🐰参考资料
- 会持续更新,还未更新完
🐰 w e b p a c k 简介 \color{red}{webpack简介} webpack简介
webpack基本使用
它会以一个或多个文件作为打包的入口,将我们整个项目所有文件编译组合成一个或多个文件输出出去, 输出的文件就是编译好的文件,我们把该文件叫做bundle,可以自定义名称
功能介绍
- 开发模式:仅能编译JS中的 ES Module语法
- 生产模式:能编译JS中的ES Module语法,还能压缩JS代码
开发模式
开发模式就是我们开发代码时使用的模式
- 编译代码,使浏览器能识别运行。开发时我们有样式资源、字体图标、图片资源、html资源等,webpack默认是不能处理这些资源的、我们需要加载配置来编译这些资源。
- 代码质量检查,树立代码规范,检查代码规范和格式、统一风格、让代码更优雅美观
生产模式
🐰 核心概念
五大核心概念
webpack的配置文件
基本配置 webpack.config.js
var path = require('path');
module.exports = {
mode: 'development',
// 入口文件
entry: './main.js',
// 输出
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'foo.bundle.js'
},
// 加载器
module: {
rules: []
},
// 插件
plugins: [],
// 模式
mode: 'development',
};
🐰 处理样式资源 − c s s 、 l e s s 、 s a s s 、 s t y l u s \color{red}{处理样式资源-css、less、sass、stylus} 处理样式资源−css、less、sass、stylus
处理css
安装css-loader,css-loader 会对 @import 和 url() 进行处理,就像 js 解析 import/require() 一样
npm install --save-dev css-loader
webpack.config.js配置
// 加载器
module: {
rules: [
{
test: /\.css/i,
//执行顺序,从右到左
use: ["style-loader", "css-loader"]
}
]
},
css-loader => 将css资源编译成common.js的模块到js中
style-loader => 将js中css通过创建style标签添加到文件中生效
处理less
下载less-loader,webpack 将 Less 编译为 CSS 的 loader
npm install less less-loader --save-dev
webpack.config.js配置
{
test: /\.less/i,
use: ["style-loader", "css-loader", "less-loader"]
}
处理Sass
下载sass-loader ,加载 Sass/SCSS 文件并将他们编译为 CSS
npm install sass-loader -d
webpack.config.js
{
test: /\.s[ac]ss$/i,
use: ["style-loader", "css-loader", "sass-loader"]
}
起点文件 index.js,需要引入文件
import ‘./index.css’
html文件需要引入这个bundle.js文件就行了
<body>
<script src="../bundle/bundle.js">
</script>
</body>
处理stylus
下载stylus-loader,一个 webpack 的 Stylus loader。将 Stylus 文件编译为 CSS
npm i stylus-loader -d
webpack.config.js
{
test: /\.styl$/,
loader: "stylus-loader", // 将 Stylus 文件编译为 CSS
// 这种写法,只能加载一个loader
}
处理图片
webpack.config.js
{
test: /\.(png|jpg|gif|webp)$/,
type: "asset"
}
🐰 处理 J S − E s l i n t 、 B a b e l \color{red}{处理JS-Eslint、Babel} 处理JS−Eslint、Babel
Eslint(插件)
可组装的JavaScript和JSX工具
安装
npm install eslint-webpack-plugin eslint --save-dev
插件的话需要引入
const ESLintPlugin = require('eslint-webpack-plugin');
// 插件
plugins: [
new ESLintPlugin({
context: path.resolve(__dirname, "src") // 检查文件范围
})
],
接下来就需要创建一个配置文件,来配置我们的eslint相关配置
- .eslintrc.*:新建文件,位于项目根目录(只是格式不同)
- .eslintrc
- .eslintrc.js
- .eslintrc.json
- package.json中的eslintConfig:不需要创建文件,在原有的文件基础上写
ESLint 会查找和自动读取他们,所以以上配置文件只需要存在一个即可
.eslintrc.js配置
module.exports = {
// 解析选项
parserOptions: {},
//具体检查规则
rules: {},
// 继承检查规则
extends: []
}
parseOptions
parserOptions: {
ecmaVersion: 6, // ES 语法版本
sourceType: 'module', // ES 模块化
ecmaFeatures: { // ES其他特性
jsx: true // 开启JSX
}
},
rules
- off | 0 关闭规则
- warn | 1 开启规则
- error | 2 开启规则(会导致程序退出)
rules: {
semi: "error", //禁止使用分号
'array-callback-return': 'warn',// 回调函数中要有return 语句
'default-case': [
'warn', // 要求switch语句中有default分支,否则警告
{
commentPattern: '^no default$' // 允许在最后注释 no default,就不会有警告了
}
]
},
extends
Eslint 常见指令
.eslintignore
跟git的那个功能类似,都是忽略一些不必要检查的文件
babel
位于项目根目录
- 新建配置文件
- ./babel.config.js
- .babel.config.json
- .babelrc
- .babelrc.json
- packjson中的babel也可以写
以上的文件存在一个即可
安装
此 package 允许你使用 Babel 和 webpack 转译 JavaScript 文件
npm install -D babel-loader @babel/core @babel/preset-env webpack
presets预设
- @babel/preset-env 用来编译新版本的JavaScript
- @babel/preset-react 用来编译React.jsx的预设
- @babel/preset-typescript 编译TypeScript语法的预设
配置
webpack.config.js
module: {
rules: [
{
test: /\.m?js$/,
exclude: /(node_modules|bower_components)/,
// 可以单独拿出来,放在.babelrc.js
// use: {
// loader: 'babel-loader',
// options: {
// presets: ['@babel/preset-env']
// }
// }
}
]
}
.babelrc.js
module.exports = {
// 预设
presets:["@babel/preset-env"]
}
🐰output 相关配置
修改输出文件位置
有目录格式的文件输出
我们可以看 output 这一模块
// 输出
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'main.js'
},
// 加载器
module: {
rules: [
{
test: /\.(png|jpe?g|gif|webp)$/,
type: "asset",
generator: {
filename: 'static/images/[hash][ext][query]'
}
}
]
}
清空上次输出文件夹位置
增加一个clean为true的配置项就可以了
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'main.js',
clean: true
},
开发服务devServer
这里配置devServer相关配置,前端配置代理也是在这里
devServer: {
host: 'localhost', // 启动服务器域名
port: 3000, // 端口
open: true, // 是否自动打开浏览器
},
🐰图片优化
图片转base64
小图片不转为base64格式,可以减少对图片的单独请求
{
test: /\.(png|jpe?g|gif|webp)$/,
type: "asset",
parser: {
dataUrlCondition: {
// 小于100kb的转为base64
maxSize: 100 * 1024
}
}
}
🐰 生产模式配置 \color{red}{生产模式配置} 生产模式配置
提取css成单独文件
前面咱们在处理css中,是打包进入了js文件之中
安装下载
npm install --save-dev mini-css-extract-plugin
webpack.config.js配置
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
module.exports = {
plugins: [new MiniCssExtractPlugin()],
module: {
rules: [
{
test: /\.css$/i,
use: [MiniCssExtractPlugin.loader, "css-loader"],
},
],
},
};
结果会形成单独的css文件
css 兼容性处理
安装postcss-preset-env
npm install --save-dev postcss-loader postcss
在webpack.config.js中配置,要注意配置所在的位置顺序
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [
[
'postcss-preset-env',
{
// 其他选项
},
],
],
},
},
},
],
},
],
},
};
我们也可以控制兼容的范围
在package.json中
"browserslist": [
"last 2 version", // 最近两个版本之内
"> 1%", // 覆盖市面上99%的浏览器
"not dead" //
]
css压缩
安装css-minimizer-webpack-plugin
npm install css-minimizer-webpack-plugin --save-dev
webpack.config.js
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin")
module.exports = {
module: {
optimization: {
minimizer: [
new CssMinimizerPlugin(),
],
},
};