1.base.config.js
const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const {CleanWebpackPlugin} = require("clean-webpack-plugin");
const CopyWebpackPlugin = require("copy-webpack-plugin");
const VueLoaderPlugin = require('vue-loader/lib/plugin')
const PATH = {
app:path.join(__dirname,"../src/main.js"),
build:path.join(__dirname,"../dist")
}
module.exports = {
entry:{
app:PATH.app
},
output:{
path:PATH.build,
filename:process.env.NODE_ENV == "development"?"js/[name].[hash:8].js":"js/[name].js"
},
resolve:{
extensions:[".vue",".js"],
alias:{}
},
plugins:[
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template:"./public/index.html",
filename:"index.html",
}),
new CopyWebpackPlugin([{
context:path.join(__dirname,"../public"),
from:"**/*",
to:path.join(__dirname,"../dist"),
ignore:["index.html"]
}]),
new VueLoaderPlugin()
],
module:{
rules:[
{
test:/\.vue$/,
loader:"vue-loader"
},
{
test:/\.js$/,
loader:"babel-loader"
},
{
test:/\.(jpg|gif|png|svg)$/,
use:{
loader:"url-loader",
options:{
limit:2048,
name:"img/[name].[ext]"
}
}
},
{
test:/\.(svg|woff|woff2|ttf|eot)$/,
use:{
loader:"url-loader",
options:{
name:"font/[name].[ext]"
}
}
}
]
}
}
2. dev.config.js
const baseConfig = require("./base.config")
const webpackMerge = require("webpack-merge");
const config = webpackMerge(baseConfig,{
mode:"development",
module:{
rules:[
{
test:/\.(css|scss)$/,
use:["style-loader","css-loader","sass-loader"]
}
]
},
devServer:{
port:9000
}
})
module.exports = config;
3. pro.config.js
const baseConfig = require("./base.config");
const webpackMerge = require("webpack-merge");
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const config = webpackMerge(baseConfig,{
mode:"production",
module:{
rules:[
{
test:/\.(css|scss)$/,
use:ExtractTextPlugin.extract({
fallback: "style-loader",
use:["css-loader","postcss-loader","sass-loader"]
})
}
]
},
plugins:[
new ExtractTextPlugin({
filename:"css/[name].[hash:8].css"
})
]
})
module.exports = config;