webpack
基础篇
webpack 基础配置
const path = require('path')
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'dist')
}
}
webpack 打包文件解析
Html 插件
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
// ...
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html', // 生成的文件名
template: './src/index.html', // 模板
inject: 'head', // 插入方式
title: '自定义标题', // 标题
favicon: './icon.ico', // favicon图
minify: { // 压缩
removeAttributeQuotes: true, // 移除属性的引号
},
chunks: ['page1'], // 包含的代码块, 适用于多页应用
})
]
}
注意:inject有四个值: true body head false
true: 默认值,script标签位于html文件的 body 底部 body: script标签位于html文件的 body 底部 head: script标签位于html文件的 head中 false: 不插入生成的js文件,这个几乎不会用到的
处理样式
module.exports = {
// ...
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
},
{
test: /\.less$/,
use: [
'style-loader',
'css-loader',
'less-loader'
]
},
{
test: /\.styl$/,
use: [
'style-loader',
'css-loader',
'stylus-loader'
]
},
{
test: /\.(sass|scss)$/,
use: [
'style-loader',
'css-loader',
'sass-loader'
]
},
]
}
}
注意:安装 sass-loader 需要同时安装 node-sass
转换 ES6+等高级语法
module.exports = {
// ...
module: {
rules: [
{
test: /\.js$/,
use: [
{
loader: 'babel-loader',
options: {
presets: [
'@babel/preset-env'
],
plugins: [
// 转es7
['@babel/plugin-proposal-decorators', {"legacy": true}],
['@babel/plugin-proposal-class-properties', {"loose": true}],
"@babel/plugin-transform-runtime"
]
}
}
],
include: path.resolve(__dirname, 'src'),
exclude: /node_modules/
}
]
}
}
处理 js 语法以及校验
const path = require('path')
module.exports = {
// ...
module: {
rules: [
{
test: /\.js$/,
use: {
loader: 'eslint-loader',
options: {
enforce: 'pre' // previous post
}
}
}
]
}
}
引入全局变量
const webpack = require('webpack')
module.exports = {
// ...
plugins: [
new webpack.DefinePlugin({
// 定义在编译阶段使用的变量;在浏览器运行阶段就只是值了
"ENVIRONMENT": JSON.stringify("development")
})
]
}
process.env.ENVIRONMENT ===> development
图片处理
- 图片的分类
- css 里的background-image
- html 里的 标签
- js 里引入的img
const webpack = require('webpack')
module.exports = {
// ...
module: {
rules: [
{
test: /\.(png|svg|jpg|gif)$/,
use: {
loader: 'file-loader',
options: {
name:'assets/[name].[ext]',
}
}
},
{
test: /\.html$/,
loader: 'html-withimg-loader'
},
{
loader: 'url-loader',
options: {
limit: 15000,
name: '[name].[ext]',
},
}
]
}
}
打包文件分类
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module.exports = {
output: {
// ...
publicPath: '' // 全局添加路径 公共路径
},
plugins: [
...
new MiniCssExtractPlugin({
filename: 'css/main.css' // 加上css目录
})
],
module: {
rules: [
{
test: /\.(png|jpg|gif|jpeg)$/,
use: {
loader: 'url-loader',
options: {
limit: 1,
outputPath: 'img/', // img文件夹下
publicPath: 'https://www.baidu.com' // img 添加cdn加速 路径
}
}
},
]
}
}