m2pool web
Go to file
yaoqin 21a331680e 取消enx活动图片 费率改为1%. 2025-04-22 14:34:00 +08:00
mining-pool 取消enx活动图片 费率改为1%. 2025-04-22 14:34:00 +08:00
README.md 添加前端config配置 2025-04-15 07:36:06 +00:00

README.md

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: {} } } });