webpack.config.js:webpack的配置文件,当你运行 webpack 指令时,会加载里面的配置,所有构建工具都是基于nodejs平台运行的,模块化默认采用commonjs。一下是webpack.config.js的配置说明:
// resolve是用来拼接绝对路径的方法
const { resolve } = require('path');
// webpack配置
module.exports = {
/**
* entry: 入口起点
* 1. string
* entry: './src/index.js'
* 单入口,打包形成一个chunk,输出一个bundle文件,此时chunk的名称默认是main
* 2. array
* entry: ['./src/index.js', './src/add.js']
* 多入口,所有入口文件最终只会形成一个chunk, 输出出去只有一个bundle文件,
* 只有在HMR功能中让html热更新生效
* 3. object
* entry: {a: './src/a.js', b: './src/b.js', c: './src/c.js'}
* 多入口,有几个入口文件就形成几个chunk,输出几个bundle文件,此时chunk的名称是key
* 3.1 特殊用法
* {
* // 所有入口文件最终只会形成一个chunk, 输出出去只有一个bundle文件。
* index: ['./src/index.js', './src/count.js'],
* // 形成一个chunk,输出一个bundle文件。
* add: './src/add.js'
* }
*/
entry: {
index: ['./src/index.js', './src/count.js'],
add: './src/add.js'
},
// 输出
output: {
// 输出文件名称(指定名称+目录)
filename: 'js/[name].js',
// 输出文件目录(将来所有资源输出的公共目录)
// __dirname nodejs的变量,代表当前文件的目录绝对路径
path: resolve(__dirname, 'build'),
// 所有资源引入公共路径前缀 --> 'imgs/a.jpg' --> '/imgs/a.jpg'
publicPath: '/',
chunkFilename: 'js/[name]_chunk.js', // 非入口chunk的名称
// library: '[name]', // 整个库向外暴露的变量名
// libraryTarget: 'window' // 变量名添加到哪个上 browser
// libraryTarget: 'global' // 变量名添加到哪个上 node
// libraryTarget: 'commonjs'
},
module: {
// loader的配置
rules: [
// 不同文件必须配置不同loader处理
{
// 匹配哪些文件
test: /\.css$/,
// 使用哪些loader进行处理, 多个loader用use
// loader: 'style-loader'
use: [
// use数组中loader执行顺序:从右到左,从下到上 依次执行
// 创建style标签,将js中的样式资源插入进行,添加到head中生效
'style-loader',
// 将css文件变成commonjs模块加载js中,里面内容是样式字符串
'css-loader'
]
},
{
test: /\.less$/,
use: [
'style-loader',
'css-loader',
// 将less文件编译成css文件
// 需要下载 less-loader和less
'less-loader'
]
},
{
// 问题:默认处理不了html中img图片
// 处理图片资源
test: /\.(jpg|png|gif)$/,
// 使用一个loader
// 下载 url-loader file-loader
loader: 'url-loader',
options: {
// 图片大小小于8kb,就会被base64处理
// 优点: 减少请求数量(减轻服务器压力)
// 缺点:图片体积会更大(文件请求速度更慢)
limit: 8 * 1024,
// 问题:因为url-loader默认使用es6模块化解析,而html-loader引入图片是commonjs
// 解析时会出问题:[object Module]
// 解决:关闭url-loader的es6模块化,使用commonjs解析
esModule: false,
// 给图片进行重命名
// [hash:10]取图片的hash的前10位
// [ext]取文件原来扩展名
name: '[hash:10].[ext]'
}
},
// 打包其他资源(除了html/js/css资源以外的资源)
{
// 排除css/js/html资源
exclude: /\.(css|js|html|less)$/,
loader: 'file-loader',
options: {
name: '[hash:10].[ext]'
}
}
{
// 以下配置只会生效一个
oneOf: []
}
]
},
// plugins的配置
plugins: [
/**
* html-webpack-plugin
* 功能:默认会创建一个空的HTML,自动引入打包输出的所有资源(JS/CSS)
* 需求:需要有结构的HTML文件
*/
new HtmlWebpackPlugin({
// 复制 './src/index.html' 文件,并自动引入打包输出的所有资源(JS/CSS)
template: './src/index.html',
// 压缩html代码
minify: {
// 移除空格
collapseWhitespace: true,
// 移除注释
removeComments: true
}
})
],
/**
* mode:模式
* 1.开发模式:“development”
* 2.生产模式:“production”,生产环境下会自动压缩js代码
*/
mode: 'development',
}