初始配置
配置:
- webpack
- webpack-cli
使用:
const path = require('path');
module.exports = {
mode: 'development',
entry: './index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
};
生成html文件和压缩html
配置:
- html-webpack-plugin
使用:
const htmlWebpackPlugin = require('html-webpack-plugin');
module.exports ={
plugins:[
new htmlWebpackPlugin({
filename: 'main.html',
template:'./tem.html',
minify: {
collapseWhitespace:true,
removeComments:true
}
}),
]
}
};
打包样式文件
css->页面style标签
配置:
- style-loader:将js中的css代码插入到页面中
- css-loader: 将js中引入的css文件插入到js文件中
使用:
module.exports ={
module:{
{
test:/\.css$/i,
use:['style-loader','css-loader']
},
}
};
css->单个文件
配置:
- mini-css-extract-plugin 将js中css文件导入到单个文件中
- css-loader: 将js中引入的css文件插入到js文件中
使用:
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports ={
module:{
{
test:/\.css$/i,
use:[MiniCssExtractPlugin.loader,'css-loader']
},
}
};
plugins:[
new MiniCssExtractPlugin({
filename:'css/main.css'
}),
]
}
less->页面style标签
配置:
- less-loader 将less文件转换成css文件
- style-loader:将js中的css代码插入到页面中
- css-loader: 将js中引入的css文件插入到js文件中
使用:
module.exports ={
module:{
{
test:/\.less/,
use:['style-loader','css-loader','less-loader']
},
}
};
压缩css文件
配置:
- css-minimizer-webpack-plugin
使用:
const CssMinimizerWebpackPlugin = require("css-minimizer-webpack-plugin");
module.exports ={
module:{
new CssMinimizerWebpackPlugin()
}
};
css兼容性
"browserslist": {
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
],
"production": [
">0.2%",
"not dead",
"not op_mini all"
]
}
配置:
- postcss
- postcss-loader
- postcss-preset-env
使用:
process.env.NODE_ENV = 'development';
打包js文件
压缩js
配置:
- 使用webpack自带功能
使用:
module.exports ={
mode:'production',
};
eslint
配置:
- eslint
- eslint-config-airbnb-base
- eslint-plugin-import
- eslint-webpack-plugin
module.exports = {
root: true,
env: {
node: true,
browser: true,
es6: true
},
extends: "airbnb-base",
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
}
};
使用:
module.exports ={
plugins:[
new ESLintWebpackPlugin({
fix:true
})
]
}
js兼容性处理
配置:
- babel-loader
- @babel/core
- @babel/preset-env
- core-js
使用:
module.exports ={
module:{
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: [
[
'@babel/preset-env',
{
useBuiltIns:'usage',
corejs:{
version:3
},
targets:{
chrome:'60',
firefox:'60',
ie:'9',
safari:'10',
edge:'17'
}
}
]
]
}
}
}
}
}
打包图片资源
配置:
- 使用webpack自带的asset
使用:
assetModuleFilename: 'images/[hash:5][ext][query]'
module.exports ={
module:{
{
test:/\.png$/,
type:'asset/resource',
generator: {
filename: 'static/[hash:5][ext][query]'
}
},
}
};
打包其他资源
配置:
- 使用webpack5自带的asset
使用:
assetModuleFilename: 'images/[hash:5][ext][query]'
module.exports ={
module:{
{
exclude:/\.(html|css|js|png)$/,
type:'asset/resource',
自定义输出文件
generator: {
filename:'[hash:5].[ext]'
},
}
}
};
生成服务器
配置:
- webpack-dev-server
使用:
module.exports ={
target: "web",
entry:['./index.js','./tem.html'],
... ...
devServer:{
static: {
directory: path.resolve(__dirname, 'dist'),
},
compress:true,
port:8888,
hot: true,
open: true,
}
};
if (module.hot)
module.hot.accept('./print.js',function(){
})