From 00e6f9010a17436e09c582a3e61a5f6e09b21458 Mon Sep 17 00:00:00 2001 From: ylx <497681109@qq.com> Date: Tue, 15 Apr 2025 07:36:06 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=89=8D=E7=AB=AFconfig?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根据要求添加config配置内容 --- README.md | 279 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 278 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d63ab0d..3e9b54b 100644 --- a/README.md +++ b/README.md @@ -1 +1,278 @@ -web code +const { defineConfig } = require('@vue/cli-service'); +const path = require('path'); +const PrerenderSPAPlugin = require('@dreysolano/prerender-spa-plugin'); +const Renderer = PrerenderSPAPlugin.PuppeteerRenderer; +const SitemapWebpackPlugin = require('sitemap-webpack-plugin').default; +const CompressionPlugin = require('compression-webpack-plugin'); + +module.exports = defineConfig({ + transpileDependencies: true, + + devServer: { + hot: true, // 启用HMR + liveReload: true, // 启用实时重载 + client: { + overlay: false // 禁用错误遮罩层 + } + }, + + configureWebpack: config => { + const baseConfig = { + cache: { + type: 'filesystem', // 使用文件系统缓存 加快二次构建速度 减少重复编译 + buildDependencies: { + config: [__filename] + }, + // 添加缓存配置 + cacheDirectory: path.resolve(__dirname, 'node_modules/.cache/webpack'), + name: process.env.NODE_ENV // 区分环境 + }, + optimization: { + moduleIds: 'deterministic', + splitChunks: { // 代码分割配置文件系统缓存比内存缓存更持久 可以在多次构建之间复用编译结果 + chunks: 'all', + minSize: 30000, // 最小分块大小 + maxSize: 300000, // 最大分块大小 避免单个文件过大 + cacheGroups: { // 缓存组配置 + vendors: { // 第三方库分组 + name: 'chunk-vendors', + test: /[\\/]node_modules[\\/]/, + priority: -10, + chunks: 'initial' + }, + common: { // 公共模块分组 + name: 'chunk-common', + minChunks: 2, + priority: -20, + chunks: 'initial', + reuseExistingChunk: true + } + }, + + } + }, + plugins: [ //压缩静态资源 减少传输体积 提升加载速度 + new CompressionPlugin({ + test: /\.(js|css|html|svg)$/, + threshold: 10240, + minRatio: 0.8 + }) + ] + }; + + if (process.env.NODE_ENV === 'production') { + // 优化预渲染插件配置 + const prerenderPlugin = new PrerenderSPAPlugin({ + staticDir: path.join(__dirname, 'dist'), + // 只预渲染最重要的路由 + routes: ['/zh', '/en','/en/dataDisplay', '/zh/dataDisplay','/zh/rate', '/en/rate','/zh/ServiceTerms', '/en/ServiceTerms','/zh/apiFile', '/en/apiFile'], + renderer: new Renderer({ + renderAfterTime: 1000, // 增加等待时间,确保内容加载完成 + maxConcurrentRoutes:2, // 降低并发数,避免资源竞争 + timeout: 10000, // 增加超时时间 + headless: true, + + + + + }), + + }); + + + const zhSitemapPlugin = new SitemapWebpackPlugin({ + base: 'https://m2pool.com/zh', + paths: [ + { + path: '/zh', + changefreq: 'daily', + lastmod: new Date().toISOString() + }, + { + path: '/zh/dataDisplay', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/zh/ServiceTerms', + changefreq: 'monthly', + lastmod: new Date().toISOString() + }, + { + path: '/zh/apiFile', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/zh/rate', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/zh/AccessMiningPool/nexaAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/zh/AccessMiningPool/grsAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/zh/AccessMiningPool/monaAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/zh/AccessMiningPool/dgbsAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/zh/AccessMiningPool/dgbqAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/zh/AccessMiningPool/dgboAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/zh/AccessMiningPool/rxdAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + ], + options: { + filename: 'sitemap-zh.xml', + lastmod: true, + changefreq: 'weekly', + priority: 0.7 + } + }); + + const enSitemapPlugin = new SitemapWebpackPlugin({ + base: 'https://m2pool.com/en', + paths: [ + { + path: '/en', + priority: 1.0, + changefreq: 'daily', + lastmod: new Date().toISOString() + }, + { + path: '/en/dataDisplay', + priority: 0.8, + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/en/ServiceTerms', + priority: 0.6, + changefreq: 'monthly', + lastmod: new Date().toISOString() + }, + { + path: '/en/apiFile', + priority: 0.7, + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/en/rate', + priority: 0.8, + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/en/AccessMiningPool/nexaAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/en/AccessMiningPool/grsAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/en/AccessMiningPool/monaAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/en/AccessMiningPool/dgbsAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/en/AccessMiningPool/dgbqAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/en/AccessMiningPool/dgboAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + { + path: '/en/AccessMiningPool/rxdAccess', + changefreq: 'weekly', + lastmod: new Date().toISOString() + }, + + ], + options: { + filename: 'sitemap-en.xml', + lastmod: true, + changefreq: 'weekly', + priority: 0.7 + } + }); + + + baseConfig.plugins.push(zhSitemapPlugin); + baseConfig.plugins.push(enSitemapPlugin); + baseConfig.plugins.push(prerenderPlugin); + + } + + return baseConfig; + }, + + chainWebpack: config => { + // HTML压缩配置 + config.plugin('html').tap(args => { + args[0].minify = { + removeComments: true, // 删除 HTML 注释减小文件体积 + collapseWhitespace: true, // 压缩空白字符 删除多余的空格和换行 + removeAttributeQuotes: true, // 删除属性的引号 + collapseBooleanAttributes: true, // 简化布尔属性 + removeScriptTypeAttributes: true // 删除默认的 script type 属性type="text/javascript" + }; + // META 标签配置 + args[0].meta = { + // 移动端视口配置 + viewport: 'width=device-width, initial-scale=1, shrink-to-fit=no', + 'format-detection': 'telephone=no',// 禁用电话号码自动识别 + 'apple-mobile-web-app-capable': 'yes' // 支持添加到 iOS 主屏幕 + }; + return args; + }); + + // 移除 prefetch 插件 + //禁用 Vue CLI 默认的预取功能 prefetch 会在主资源加载完后, + // 自动下载所有其他路由的资源对于大型应用,可能会预加载过多不必要的资源 + config.plugins.delete('prefetch') + }, + //生产环境不生成 source map 文件源码映射信息 减小打包体积 提高网站安全性 + productionSourceMap: false, + + css: { + extract: true, //组件中的 CSS 提取至独立的 CSS 文件中 支持并行加载,减少页面阻塞 + sourceMap: false,// CSS 不启用 source maps 减少构建文件大小 + loaderOptions: { + css: {} + } + } +});