| | |
| | | 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 = { |
| | |
| | | } |
| | | }); |
| | | |
| | | // 启用优化设置 |
| | | 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') { |