const path = require('path') const { defineConfig } = require('@vue/cli-service') // 强制禁用所有eval相关功能 process.env.VUE_CLI_BABEL_TRANSPILE_MODULES = 'false' process.env.VUE_CLI_MODERN_BUILD = 'false' const appRoot = path.resolve(__dirname) module.exports = defineConfig({ outputDir: path.join(appRoot, 'dist/renderer'), publicPath: './', configureWebpack: { target: 'electron-renderer', // 完全禁用eval,强制使用安全的sourcemap devtool: false, resolve: { alias: { '@': path.join(appRoot, 'src/renderer'), 'views': path.join(appRoot, 'src/renderer/views') }, extensions: ['.js', '.vue', '.json'] }, externals: { electron: 'require("electron")', fs: 'require("fs")', path: 'require("path")' }, plugins: [ // 定义全局变量 new (require('webpack')).DefinePlugin({ 'global': 'globalThis', 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development') }), // 提供全局变量 new (require('webpack')).ProvidePlugin({ global: 'globalThis', process: 'process/browser' }) ], node: { global: true }, // 强制禁用eval相关功能 optimization: { minimize: false, minimizer: [], splitChunks: { chunks: 'all', cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all', } } } }, // 禁用所有可能导致eval的webpack功能 experiments: { topLevelAwait: false, asyncWebAssembly: false } }, pages: { index: { entry: path.join(appRoot, 'src/renderer/main.js'), template: path.join(appRoot, 'public/index.html'), filename: 'index.html' } }, pluginOptions: { electronBuilder: { preload: path.join(appRoot, 'src/preload.js'), mainProcessFile: path.join(appRoot, 'src/main/index.js'), builderOptions: { extraResources: [{ from: path.join(appRoot, 'dist/renderer'), to: 'app', filter: ["**/*"] }] } } }, devServer: { hot: false, liveReload: false, allowedHosts: "all", static: { directory: path.join(__dirname, 'dist/renderer'), watch: false }, compress: false, proxy: null, // 安全配置 headers: { "Content-Security-Policy": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob:; font-src 'self' data:; connect-src 'self' ws: wss:; object-src 'none'; frame-src 'none';" } }, chainWebpack: config => { // 强制禁用所有sourcemap,避免eval config.devtool(false) // 禁用所有可能导致eval的webpack功能 config.optimization.minimize(false) // 静态资源处理 config.module .rule('images') .set('generator', { filename: 'img/[name].[hash:8][ext]' }) // 全局变量定义 config.plugin('define').tap(args => { args[0]['global'] = 'globalThis' args[0]['process.env.NODE_ENV'] = JSON.stringify(process.env.NODE_ENV || 'development') args[0]['process.browser'] = true args[0]['globalThis'] = 'globalThis' args[0]['window.global'] = 'window' args[0]['global["webpackChunkGoFaster"]'] = 'globalThis["webpackChunkGoFaster"]' // 明确禁用eval args[0]['__webpack_require__.e'] = 'undefined' return args }) // 添加全局polyfill config.resolve.alias.set('global', 'globalThis') // 确保所有模块都能访问全局变量 config.resolve.alias.set('process', 'process/browser') // 添加webpack chunk名称处理 config.output.chunkFilename('[name].js') config.output.globalObject('globalThis') // 禁用动态导入的eval config.plugin('hot').use(require('webpack').HotModuleReplacementPlugin, [{ multiStep: false, fullBuildTimeout: 200 }]) } })