Files
coinbus/yq/vue.config.js
2026-01-16 10:32:27 +08:00

134 lines
3.7 KiB
JavaScript

const path = require('path');
const PrerenderSPAPlugin = require('@dreysolano/prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
const SitemapWebpackPlugin = require('sitemap-webpack-plugin').default;
const getProxyConfig = () => {
return {
"/api": {
target: "https://fapi.binance.com",
onProxyRes(proxyRes, req, res) {
const realUrl = new URL(req.url || '', "https://fapi.binance.com")?.href || '';
proxyRes.headers['x-real-url'] = realUrl;
},
pathRewrite: { "^/api": "" },
changeOrigin: true,
},
};
};
const createPrerenderPlugin = () => {
return new PrerenderSPAPlugin({
staticDir: path.join(__dirname, 'dist'),
routes: ['/', '/IndexIntroduce', '/dataDisplay', '/personal', '/Alarm', '/help'],
timeout: 10000,
renderer: new Renderer({
headless: true,
inject: {
foo: 'bar',
},
}),
postProcess(context) {
console.log(`Rendering route: ${context.route}`);
return context;
},
});
};
module.exports = (config) => {
const devServerProxy = getProxyConfig();
if (process.env.NODE_ENV === 'production') {
const prerenderPlugin = createPrerenderPlugin();
const paths = [
{
path: '/',
lastmod: new Date().toISOString(),
priority: 1.0,
changefreq: 'daily'
},
{
path: '/IndexIntroduce',
lastmod: new Date().toISOString(),
priority: 0.8,
changefreq: 'weekly'
},
{
path: '/dataDisplay',
lastmod: new Date().toISOString(),
priority: 0.8,
changefreq: 'weekly'
},
{
path: '/personal',
lastmod: new Date().toISOString(),
priority: 0.6,
changefreq: 'weekly'
},
{
path: '/Alarm',
lastmod: new Date().toISOString(),
priority: 0.7,
changefreq: 'weekly'
},
{
path: '/help',
lastmod: new Date().toISOString(),
priority: 0.6,
changefreq: 'weekly'
}
];
const sitemapPlugin = new SitemapWebpackPlugin({
base: 'https://coinbus.cc',
paths,
options: {
filename: 'sitemap.xml',
lastmod: true,
skipgzip: true, // 不生成 .gz 文件
formatter: null, // 使用默认 formatter
xmlNs: 'http://www.sitemaps.org/schemas/sitemap/0.9', // 添加正确的 XML 命名空间
headers: {
'Content-Type': 'application/xml; charset=utf-8'
}
}
});
return {
publicPath: '/',
devServer: {
proxy: devServerProxy
},
chainWebpack: (config) => {
if (prerenderPlugin) {
config.plugin('prerender').use(prerenderPlugin);
}
if (sitemapPlugin) {
config.plugin('sitemap').use(sitemapPlugin);
}
},
configureWebpack: {
plugins: [
sitemapPlugin
]
},
lintOnSave: false
};
} else {
return {
publicPath: '/',
devServer: {
proxy: devServerProxy
},
lintOnSave: false
};
}
};