一、webpack
webpack是一种前端资源构建工具,也是静态模块打包器,根据模块的依赖关系进行静态分析,打包生成对应的静态资源
二、五个核心概念
1.entry
入口文件,有多入口和单入口之分,指示webpack以哪一个文件为入口开始打包,分析构建内部依赖图
entry: './src/js/index.js',
2.output
输出,指示打包后的资源输出到哪里去,以及如何命名
output: {
filename: 'js/[name].[contenthash:10].js',//输出文件名
path: resolve(__dirname, 'build')//输出路径,__dirname是nodejs变量,代表当前文件目录的绝对路径
}, 3.module
一般提供loader处理那些非JavaScript的文件
(1)如果只有一个loader可以直接使用 loader:'文件处理的loader' ,然后在options中做相应的配置
(2)如果有多个loader可以放在use数组中,loader的处理顺序为从右至左,要注意顺序
(3)不同的文件要配置不同的loader处理
(4)正常来说一个文件只能被一个loader处理,当一个文件被多个loader处理的时候一定要知道loader执行的顺序,比如是先执行eslint-loader还是babel-loader(eslint->babel,因为如果先babel后再eslint,如果有语法错误,前面就白做了)
module: {
rules: [
{
/*处理less文件*/
test: /\.less$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
{ loader: 'postcss-loader' },
'less-loader'
]
},
{
/*处理css文件*/
test: /\.css$/,
use: [
'style-loader'
'css-loader',
]
},
{
/*处理图片文件*/
test: /\.(png|jpg|jpeg|gif)$/,
loader: 'url-loader',
enforce:'pre',//优先执行,post为延迟执行
options: {
limit: 8 * 1024,
name: '[contenthash:10].[ext]',//对打包后的文件重命名
esModule: false,//如果需要处理html中的图片,还需要关闭es6模块对图片的处理
outputPath: 'images'//打包输出的目录
}
},
{
//其他文件的处理
exclude: /\.(html|css|js|png|jpg|jpeg|gif)$/,
loader: 'file-loader',
options: {
name: '[contenthash:10].[ext]',
outputPath: 'media'
}
},
]
}, 4.plugins
插件用于执行范围更广的任务,包括打包优化、压缩、重新定义环境变量等等...
plugins: [
new HtmlWebpackPlugin({
template: './src/index.html',
minify: {
//html压缩
collapseWhitespace: true,//溢出空格
removeComments: true//移除注释
}
}),
new MiniCssExtractPlugin({
filename: 'css/built.[contenthash:10].css'
}),
new WorkboxWebpackPlugin.GenerateSW({
//帮助serviceWorker快速启动
//删除旧的serviceWorker
//生成一个serve-worker.js配置文件
clientsClaim: true,
skipWaiting: true
})
], 5.mode
指示webpack使用相应模式的配置
mode: 'development',
(1)development:能让代码本地调试运行的环境
源代码经过webpack编译处理输出的资源能被浏览器允许,在这个过程中加了一些自动化的操作,让开发效率更高
(2)production:能让代码优化上线的环境
将js中css文件提取出来代码进行统一压缩兼容性处理(js/css)...

京公网安备 11010502036488号