webpack.config.js => webpack的配置文件
作用:指示webpack干哪些活(运行webpack时,会加载里边的配置)
运行指令:
一、在存在webpack.config.js的情况下:在webpack.config.js所在文件夹的终端执行webpack
二、不存在webpack.config.js的情况下
(1)开发环境webpack ./src/index.js -o ./build/built.js --mode=development
webpack会以./src/index.js为入口文件开始打包,打包后输出到./build/built.js
整体打包环境是开发环境
(2)生成环境webpack ./src/index.js -o ./build/built.js --mode=production
三、 结论
(1)webpack默认能处理js/json文件,不能处理css/img等其他资源
(2)生成环境和开发环境将ES6模块编译成浏览器能识别的模块
所有的构建工具都是基于nodejs平台运行的
配置模块默认采用commonjs模块【webpack.config.js采用module.exports】
项目模块默认采用ES6模块【index.js入口文件引入其他文件采用import】
五个核心部分
1.entry // 打包入口起点
2.output // 输出的配置
3.module // loader的配置
4.plugins // plugins的配置
5.mode // 打包模式
文件基本格式
// resolve用来拼接绝对路径,属于nodejs中的path模块
const {resolve} = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry: './src/index.js',
output: { // 输出
// 输出文件名
filename: 'built.js',
// 输出路径 [绝对路径]
// __dirname nodejs变量,当前文件目录的绝对路径
path: resolve(__dirname, 'build')
},
// loader的配置
module: {
rules: [
// 详细的loader的配置
// 处理css文件
{
// 匹配哪些文件
// 不同的文件需要配置不同的loader处理
test: /\.css$/,
// 使用哪些loader进行处理
// 使用多个loader用use,一个loader就用loader(详见图片资源处理部分)
use: [
// use数组中的loader执行顺序: 从右到左 从下到上 依次执行
// 创建style标签,将js中的样式资源插入,添加到head中生效
'style-loader',
// 将css文件变成commonjs模块加载到js中,里边内容是样式字符串
'css-loader'
]
},
// 处理less文件
{
test: /\.less$/,
use: [
'style-loader',
'css-loader',
// 将less文件编译成css文件
// 需要下载less-loader和less
'less-loader'
]
},
// 处理图片资源【在css文件中通过url形式引入的图片】
// 问题:默认处理不了html中的img
{
test: /\.(jpg|png|gif)$/,
// 下载url-loader file-loader
loader: 'url-loader',
options: {
// 图片大小小于8kb,就会被base64处理
// 优点:减少请求数量(减少服务器压力)(服务器单位时间内处理的请求数量是有限的)
// 缺点:图片体积会变大(文件请求速度会变慢)
limit: 8 * 1024
}
},
// html-loader处理html中的img图片
// 负责引入img,从而能被url-loader处理
{
test: /\.html$/,
loader: 'html-loader'
},
// 打包其他资源(除了css/js/html/less资源以外的资源)
{
exclude: /\.(css|js|html|less)$/,
loader: 'file-loader',
options: {
// 重命名
// [hash:10]:取hash的前10位
// name:取文件原来的扩展名
name: '[hash: 10].[ext]'
}
]
},
plugins: [
// html-webpack-plugin 功能:默认创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
// 需求: 需要有结构的HTML文件
new HtmlWebpackPlugin({
// 复制 "./src/index.html" 文件,并自动引入打包输出的所有资源(JS/CSS)
template: './src/index.html'
})
],
mode: 'development'