wangzhibo
2026-08-31 17ac2ce0ed52874616c79c910667e41e34604826
xiaozhi-esp32-server/main/manager-web/vue.config.js
@@ -16,8 +16,9 @@
  return path.join(__dirname, dir)
}
// 确保加载 .env 文件
// Vue CLI 会按 mode 加载 .env.*;这里再读一遍,给 vue.config.js 自身用
dotenv.config();
dotenv.config({ path: path.resolve(__dirname, `.env.${process.env.NODE_ENV || 'development'}`) });
// 定义CDN资源列表,确保Service Worker也能访问
const cdnResources = {
@@ -87,10 +88,36 @@
      }
    });
    // 启用优化设置
    config.optimization.usedExports(true);
    config.optimization.concatenateModules(true);
    config.optimization.minimize(true);
    // webpack 5 开发模式默认也会开 usedExports,会把 Vue 2 SFC 的 style
    // default export treeshake 掉(大量 style0 warning)。minimize 还会破坏
    // Vue 2 渲染函数,导致页面空白和 setAttribute 报错。这些只给生产构建。
    if (process.env.NODE_ENV === 'production') {
      config.optimization.usedExports(true);
      config.optimization.concatenateModules(true);
      config.optimization.minimize(true);
    } else {
      config.optimization.usedExports(false);
      config.optimization.concatenateModules(false);
      config.optimization.minimize(false);
    }
    // Vue 2 + vue-style-loader 需要 css-loader 的 CommonJS 导出
    const ruleTypes = ['css', 'postcss', 'scss', 'sass', 'less', 'stylus']
    ruleTypes.forEach(ruleType => {
      const rule = config.module.rule(ruleType)
      if (!rule) return
      const oneOfs = rule.oneOfs && rule.oneOfs.store
      if (!oneOfs) return
      oneOfs.forEach(oneOf => {
        if (oneOf.uses.has('css-loader')) {
          oneOf.use('css-loader').tap(options => {
            options = options || {}
            options.esModule = false
            return options
          })
        }
      })
    })
  },
  configureWebpack: config => {
    if (process.env.NODE_ENV === 'production') {