|
@@ -4,7 +4,7 @@ const { CleanWebpackPlugin } = require('clean-webpack-plugin');
|
|
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
|
//const { VueLoaderPlugin } = require('vue-loader/dist/index');
|
|
//const { VueLoaderPlugin } = require('vue-loader/dist/index');
|
|
|
const { VueLoaderPlugin } = require('vue-loader');
|
|
const { VueLoaderPlugin } = require('vue-loader');
|
|
|
-
|
|
|
|
|
|
|
+const MiniCssExtractPlugin = require('mini-css-extract-plugin');
|
|
|
|
|
|
|
|
module.exports={
|
|
module.exports={
|
|
|
entry:{
|
|
entry:{
|
|
@@ -12,7 +12,8 @@ module.exports={
|
|
|
},
|
|
},
|
|
|
output:{
|
|
output:{
|
|
|
filename:"[name].js",
|
|
filename:"[name].js",
|
|
|
- path:path.resolve(__dirname,"./dist")
|
|
|
|
|
|
|
+ path:path.resolve(__dirname,"./dist"),
|
|
|
|
|
+ publicPath: '/', // 默认路径(根据部署环境调整)
|
|
|
},
|
|
},
|
|
|
resolve: {
|
|
resolve: {
|
|
|
alias: {
|
|
alias: {
|
|
@@ -22,8 +23,22 @@ module.exports={
|
|
|
module:{
|
|
module:{
|
|
|
rules:[
|
|
rules:[
|
|
|
{
|
|
{
|
|
|
|
|
+ test: /\.html \)/,
|
|
|
|
|
+ use: [{
|
|
|
|
|
+ loader:'html-loader',
|
|
|
|
|
+ options: {
|
|
|
|
|
+ sources: {
|
|
|
|
|
+ list: [
|
|
|
|
|
+ { tag: 'img', attribute: 'src', type: 'src' }
|
|
|
|
|
+ ]
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }]
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
test:/\.css$/i,
|
|
test:/\.css$/i,
|
|
|
- use:["style-loader","css-loader"],
|
|
|
|
|
|
|
+ // use:["style-loader","css-loader"],
|
|
|
|
|
+ use:[MiniCssExtractPlugin.loader, ,"css-loader"],
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
test:/\.vue$/,
|
|
test:/\.vue$/,
|
|
@@ -43,7 +58,7 @@ module.exports={
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
- test:/\.(png|jpe?g|gif|svg)$/i,
|
|
|
|
|
|
|
+ test:/\.(png|jpe?g|gif|svg|webp)$/i,
|
|
|
// use:[{
|
|
// use:[{
|
|
|
// loader:"file-loader",
|
|
// loader:"file-loader",
|
|
|
// options:{
|
|
// options:{
|
|
@@ -54,11 +69,12 @@ module.exports={
|
|
|
// }]
|
|
// }]
|
|
|
type: 'asset/resource',
|
|
type: 'asset/resource',
|
|
|
generator:{
|
|
generator:{
|
|
|
- filename: "[name].[ext]",
|
|
|
|
|
|
|
+ // filename: "[name].[ext]",
|
|
|
|
|
+ filename: 'assets/[hash][ext][query]' // 指定输出路径
|
|
|
}
|
|
}
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
- test:/\.(woff2?|eof|ttf)$/i,
|
|
|
|
|
|
|
+ test:/\.(woff2?|eof|ttf|otf)$/i,
|
|
|
// use:[{
|
|
// use:[{
|
|
|
// loader:"file-loader",
|
|
// loader:"file-loader",
|
|
|
// options:{
|
|
// options:{
|
|
@@ -69,7 +85,8 @@ module.exports={
|
|
|
// }]
|
|
// }]
|
|
|
type: 'asset/resource',
|
|
type: 'asset/resource',
|
|
|
generator:{
|
|
generator:{
|
|
|
- filename: "./font/[name].[ext]",
|
|
|
|
|
|
|
+ // filename: "./font/[name].[ext]",
|
|
|
|
|
+ filename: 'font/[hash][ext][query]'
|
|
|
}
|
|
}
|
|
|
},]
|
|
},]
|
|
|
},
|
|
},
|
|
@@ -83,6 +100,9 @@ module.exports={
|
|
|
filename:"index.html",
|
|
filename:"index.html",
|
|
|
chunks:['index'],
|
|
chunks:['index'],
|
|
|
}),
|
|
}),
|
|
|
|
|
+ new MiniCssExtractPlugin({
|
|
|
|
|
+ filename: 'css/[name].[contenthash:8].css' // 指定 CSS 输出路径
|
|
|
|
|
+ })
|
|
|
],
|
|
],
|
|
|
// 优化配置(如代码拆分)
|
|
// 优化配置(如代码拆分)
|
|
|
optimization: {
|
|
optimization: {
|