一、CleanWebpackPlugin
每次打包后不会再次生成新的文件,而是对原来打包的文件进行更新
// webpack.config.js
var { CleanWebpackPlugin } = require("clean-webpack-plugin")
module.exports = {
mode: "development",
devtool: "source-map",
output: {
filename: "[name].[chunkhash:3].js"
},
plugins: [
new CleanWebpackPlugin()
]
}
二、HtmlWebpackPlugin
可以自动生成html文件引用打包后的文件
// webpack.config.js
const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
mode: "development",
devtool: "source-map",
entry: {
home: "./src/index.js",//home由index打包来
a: "./src/a.js"
},
output: {
filename: "scripts/[name].[chunkhash:5].js"
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({//可以每个文件引用不同的包
template: "./public/index.html",//自动生成的html文件模板采用
filename: "home.html",
chunks: ["home"]//引用的js包
}),
new HtmlWebpackPlugin({
template: "./public/index.html",
filename: "a.html",
chunks: ["a"]
})
]
}
三、CopyPlugin
复制静态页面
// webpack.config.js
const { CleanWebpackPlugin } = require("clean-webpack-plugin")
const HtmlWebpackPlugin = require('html-webpack-plugin')
const CopyPlugin = require('copy-webpack-plugin');
module.exports = {
mode: "development",
devtool: "source-map",
output: {
filename: "scripts/[name].[chunkhash:3].js"
},
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template: "./public/index.html"
}),
new CopyPlugin([
{ from: "./public", to: "./" }//将public中的文件赋值到出口文件夹例(默认dist)
])
]
}
四、file-loader
*生成依赖的文件到输出目录,然后将模块文件设置为:导出一个路径*
//file-loader
function loader(source){
// source:文件内容(图片内容 buffer)
// 1. 生成一个具有相同文件内容的文件到输出目录
// 2. 返回一段代码 export default "文件名"
}
五、url-loader
将依赖的文件转换为:导出一个base64格式的字符串
//file-loader
function loader(source){
// source:文件内容(图片内容 buffer)
// 1. 根据buffer生成一个base64编码
// 2. 返回一段代码 export default "base64编码"
}
六、路径问题
在使用file-loader或url-loader时,可能会遇到一个非常有趣的问题
比如,通过webpack打包的目录结构如下:
dist
|—— img
|—— a.png #file-loader生成的文件
|—— scripts
|—— main.js #export default "img/a.png"
|—— html
|—— index.html #<script src="../scripts/main.js" ></script>
这种问题发生的根本原因:模块中的路径来自于某个loader或plugin,当产生路径时,loader或plugin只有相对于dist目录的路径,并不知道该路径将在哪个资源中使用,从而无法确定最终正确的路径
面对这种情况,需要依靠webpack的配置publicPath解决
module.exports = {
mode: "development",
devtool: "source-map",
output: {
filename: "scripts/[name].[chunkhash:5].js",
publicPath: "/"//一般情况设置总的路径即可
}
}