partner-admin/webpack.config.js
2025-03-09 10:48:26 +08:00

94 lines
2.3 KiB
JavaScript

const path = require('path');
const { VueLoaderPlugin } = require('vue-loader');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const webpack = require('webpack');
const dotenv = require('dotenv');
const fs = require('fs');
module.exports = (env, argv) => {
// 默认为开发环境
const mode = argv.mode || 'development';
// 确定环境
const nodeEnv = env?.testing ? 'testing' : mode;
// 加载对应的环境变量文件
const envFile = `.env.${nodeEnv}`;
const defaultEnvFile = '.env';
// 加载环境变量
let envConfig = {};
// 先尝试加载默认环境变量文件
if (fs.existsSync(defaultEnvFile)) {
envConfig = dotenv.parse(fs.readFileSync(defaultEnvFile));
}
// 再尝试加载特定环境的环境变量文件
if (fs.existsSync(envFile)) {
envConfig = { ...envConfig, ...dotenv.parse(fs.readFileSync(envFile)) };
}
// 将环境变量转换为 webpack 定义插件需要的格式
const envKeys = Object.keys(envConfig).reduce((prev, next) => {
prev[`process.env.${next}`] = JSON.stringify(envConfig[next]);
return prev;
}, {});
// 确保 NODE_ENV 被正确设置
envKeys['process.env.NODE_ENV'] = JSON.stringify(nodeEnv);
console.log(`Building for ${nodeEnv} environment`);
return {
mode,
entry: './src/main.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
publicPath: '/'
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader'
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
},
{
test: /\.(png|jpg|gif|svg)$/,
type: 'asset/resource'
}
]
},
plugins: [
new VueLoaderPlugin(),
new HtmlWebpackPlugin({
template: './public/index.html'
}),
new webpack.DefinePlugin(envKeys)
],
resolve: {
extensions: ['.js', '.vue', '.json'],
alias: {
'@': path.resolve(__dirname, 'src')
}
},
devServer: {
static: {
directory: path.join(__dirname, 'public'),
},
historyApiFallback: true,
port: 8080,
hot: true
}
};
};