最近闲来无事,想着详细了解一下webpack这个打包工具,于是乎就在哔站上找了下尚硅谷的课程,跟着去搞了一下,所写的这些文章也是自己学习的一些心得,与大家分享,如有不恰当的地方,欢迎大家及时指出,我定会加以改正。前端的更新迭代很快,希望大家要不断学习新的技术来武装自己。
首先我们是来介绍webpack的,那肯定是要先放上webpack的官网地址:webpack中文网
然后,我说了,我使用的尚硅谷教程,下面是课程链接地址:webpack5从入门到精通------webpack4教程
初始化包-package.json文件:npm init
安装webpack:npm i webpack webpack-cli
打包指令:webpack 入口文件路径 -o 出口文件路径 --mode=development/production
node环境运行:node 文件路径
// resolve用来拼接绝对路径的方法
const { resolve } = require("path");
module.exports = {
// 入口文件
entry: './src/index.js',
// 出口
output: {
// 输出文件名,这里要注意一定要带后缀
// 入口文件的输出路径可以在这里进行配置:eg: "js/dist.js"
filename: 'dist.js',
// __dirname为nodejs的变量,代表当前文件的绝对路径
// 这是所有文件的输出路径
path: resolve(__dirname, 'build')
},
// loader配置
module: {
rules: [
// 详细的loader配置
]
},
// plugins配置
plugins: [
// 详细的plugins配置
],
// 模式
mode: 'development'
// mode: 'production'
}
// loader配置
module: {
rules: [
// 详细的loader配置
{
test: /\.css$/,
use: [
// use数组中loader执行顺序,从右到左,从上到下依次执行
// 创建style标签,将js中的样式资源插入进来,添加到head中
'style-loader',
// 将css文件转换成一个commonjs模块,内容是样式字符串
'css-loader'
]
},
{
test: /\.less$/,
use: [
'style-loader',
'css-loader',
// 将less文件转换成css文件
'less-loader'
]
}
]
},
{
test: /\.(jpeg|jpg|png|gif)$/,
// 使用单个loader
loader: 'url-loader',
options: {
// 这个是用来关闭es6模块化解析
esModule: false,
/**
* 图片大小小于8kb,就会被base64处理
* 优点:减少请求数量(减轻服务器负担)
* 缺点:图片体积会增大(文件请求速度更慢)
*/
limit: 8 * 1024,
/**
* 给图片进行重命名
* [hash:10]:取图片的哈希值前十位
* [ext]:取文件原来的扩展名
*/
name: '[hash:10].[ext]'
},
type: 'javascript/auto'//这个属性如果没有设置,则会生成两张图片(如果你的页面只引入了一张图片)
},
{
// 处理html的img标签引入的图片资源
test: /.html$/,
loader: 'html-loader'
}
{
// 处理图片资源
test: /\.(jpeg|jpg|png|gif)$/,
type: 'asset',
parser: {
// 处理小图片,下面是指小于10kb的图片将被转换成base64的格式
dataUrlcondition: {
maxSize: 10 * 1024 // 10kb
}
},
generator: {
filename: "images/[hash:10][ext][query]"
}
}
{
// 处理其他资源
// exclude是用来排除其他的文件资源
exclude: /.(css|less|js|html|jpeg|jpg|png|gif)$/,
loader: 'file-loader',
options: {
name: '[hash:10].[ext]'
}
}
{
// 处理其他资源
test: /\.(ttf|woff2?|mp3|mp4)$/,
type: 'asset/resource',
generator: {
filename: "midia/[hash:10][ext][query]"
}
}
output: {
// 输出文件名,这里要注意一定要带后缀
filename: 'dist.js',
// __dirname为nodejs的变量,代表当前文件的绝对路径
path: resolve(__dirname, 'build'),
// 自动清空上次打包内容
clean: true
}
plugins: [
// 详细的plugins配置
// 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源
// 需求:一个有结构的HTML文件
new HtmlWebpackPlugin({
// 复制'./src/index.html'文件,自动引入打包输出的所有资源(css/js)
template: './src/index.html'
})
]
{
test: /$\.js/,
exclude: /node_modules/,
loader: 'eslint-loader',
options: {
// 自动修复
fix: true
}
}
"eslintConfig": {
"extends": "airbnb-base"
}
plugins: [
// 我这是webpack5的写法,插件要引用
new EslintWebpackPlugin({
// 这里是因为我把resolve解构出来了
context: resolve(__dirname, 'src'),
fix: true
})
],
"eslintConfig": {
"extends": "airbnb-base"
}
module.exports = {
// 解析选项
parserOptions: {
// js版本
esmaVersion: 6,
sourceType: "module"
},
env: {
node: true, // 启用node全局变量
browser: true // 启用浏览器中全局变量
},
// 具体检查规则,优先于我们继承的规则
rules: {
"no-var": 2
},
extends: "eslint:recommended"
}
// 与五大核心同级
devServer:{
// 项目构建后的路径
contentBase: resolve(__dirname, 'build'),
// 启动gzip压缩
compress: true,
// 端口号
port: 3000,
// 自动打开浏览器
open: true
}
// 与五大核心同级
devServer:{
// 启动服务器域名
host: localhost
// 端口号
port: 3000,
// 自动打开浏览器
open: true
}
创作不易
大家转载时劳烦注一下出处
雲墨·款哥,进阶的程序猿,永远在路上