openmcp-client/webpack/webpack.task-loop.js
2025-06-13 21:12:49 +08:00

90 lines
1.9 KiB
JavaScript

import { fileURLToPath } from 'url';
import { dirname, resolve } from 'path';
import TerserPlugin from 'terser-webpack-plugin';
import webpack from 'webpack';
import CopyWebpackPlugin from 'copy-webpack-plugin';
// 适配 ESM 的 __dirname
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// 统一路径变量
const rootDir = resolve(__dirname, '..');
const srcDir = resolve(rootDir, 'renderer/src');
const outDir = resolve(rootDir, 'openmcp-sdk');
export default {
mode: 'development',
devtool: 'source-map',
entry: resolve(srcDir, 'components/main-panel/chat/core/task-loop.ts'),
output: {
path: outDir,
filename: 'task-loop.js',
libraryTarget: 'commonjs', // 改为 ESM 兼容的 commonjs 格式 [[9]]
},
target: 'node',
resolve: {
extensions: ['.ts', '.js'],
alias: {
'@': srcDir,
},
},
module: {
rules: [
{
test: /\.ts$/,
use: {
loader: 'ts-loader',
options: {
configFile: resolve(rootDir, 'tsconfig.json'),
},
},
exclude: /node_modules/,
},
{
test: /\.vue$/,
use: {
loader: 'null-loader',
},
},
],
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
extractComments: false,
terserOptions: {
compress: {
drop_console: true,
},
},
}),
],
},
plugins: [
new webpack.DefinePlugin({
window: {
nodejs: true,
navigator: {
userAgent: 2,
},
performance: {
now: () => Date.now(),
},
},
}),
new CopyWebpackPlugin({
patterns: [
{
from: resolve(rootDir, 'resources/openmcp-sdk-release'),
to: outDir,
},
],
}),
],
externals: {
vue: 'vue',
'element-plus': './tools.js', // 使用 POSIX 风格路径 [[6]]
},
};