90 lines
1.9 KiB
JavaScript
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]]
|
|
},
|
|
}; |