webpack 学习笔记总结(一)
Loader的作用
loader能够让webpack去处理非javascript文件
webpack本身只理解javascript
Loader 模块匹配规则
// 关于模块配置
rules: [
// 模块规则(配置 loader、解析器等选项)
{
test: /\.jsx?$/,
include: [
path.resolve(__dirname, "app")
],
exclude: [
path.resolve(__dirname, "app/demo-files")
],
// 这里是匹配条件,每个选项都接收一个正则表达式或字符串
// test 和 include 具有相同的作用,都是必须匹配选项
// exclude 是必不匹配选项(优先于 test 和 include)
// 最佳实践:
// - 只在 test 和 文件名匹配 中使用正则表达式
// - 在 include 和 exclude 中使用绝对路径数组
// - 尽量避免 exclude,更倾向于使用 include
issuer: { test, include, exclude },
// 标识应用这些规则,即使规则覆盖(高级选项)
loader: "babel-loader",
// 应该应用的 loader,它相对上下文解析
options: {
presets: ["es2015"]
},
// loader 的可选项
},
{
test: /\.html$/,
use: [
// 应用多个 loader 和选项
"htmllint-loader",
{
loader: "html-loader",
options: {
/* ... */
}
}
]
},
webpack基础配置内容
关联HTML(html-webpack-plugin)
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
plugins: [
new HtmlWebpackPlugin({
filename: 'index.html', // 配置输出文件名和路径
template: 'dist/index.html', // 配置文件模板
})
]
}
构建css环境
css-loader
mini-css-extract-plugin
module.exports = {
module: {
rules: [
{
test: /\.css/,
include: [
path.resolve(__dirname, 'style'),
],
use: [
{
loader: MiniCssExtractPlugin.loader
},
'css-loader'
]
},
],
plugins: [
new MiniCssExtractPlugin()
]
}
}
css预处理
npm install sass-loader node-sass webpack --save-dev
module.exports = {
...
module: {
rules: [
{
test: /\.scss$/,
use: [
{
loader: MiniCssExtractPlugin.loader
},
'css-loader',
'sass-loader'
]
}
]
},
plugins: [
new MiniCssExtractPlugin()
]
};
处理js文件
npm i uglifyjs-webpack-plugin --save-dev
module.exports = {
module: {}
plugins: [
// 压缩js代码
new UglifyPlugin()
]
}
处理图片文件
module.exports = {
module: {
rules: [
{
test: /\.(png|jpg|gif)$/,
use: [
{
loader: 'url-loader',
options: {
limit: 10000
// 在文件大小(单位 byte)低于指定的限制时,可以返回一个 DataURL。
}
}
]
}
]
}
}
loader将图片处理成base64的格式
es6 \ es7 转换编译
npm i babel-loader --save-dev
module.exports = {
// ...
module: {
rules: [
{
test: /\.js?/, // 支持 js 和 jsx
include: [
path.resolve(__dirname, 'js'), // js 目录下的才需要经过 babel-loader 处理
],
loader: 'babel-loader',
},
],
},
}