216 lines
5.3 KiB
TypeScript
216 lines
5.3 KiB
TypeScript
|
|
// @ts-nocheck
|
|||
|
|
import compression from 'vite-plugin-compression';
|
|||
|
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
|||
|
|
export default defineNuxtConfig({
|
|||
|
|
ssr: true,
|
|||
|
|
// ogImage: { enabled: false },
|
|||
|
|
compatibilityDate: '2024-11-01',
|
|||
|
|
css: ['~/assets/css/main.css'],
|
|||
|
|
devtools: { enabled: true },
|
|||
|
|
modules: [
|
|||
|
|
'@nuxtjs/tailwindcss',
|
|||
|
|
'@nuxt/content',
|
|||
|
|
'@nuxtjs/i18n',
|
|||
|
|
'@nuxtjs/seo',
|
|||
|
|
'@nuxt/image',
|
|||
|
|
'vite-plugin-compression',
|
|||
|
|
],
|
|||
|
|
nitro: {
|
|||
|
|
compressPublicAssets: true, // 启动压缩
|
|||
|
|
// 确保站点地图被正确预渲染
|
|||
|
|
prerender: {
|
|||
|
|
routes: ['/sitemap.xml', '/sitemap_index.xml', '/__sitemap__/zh.xml', '/__sitemap__/en.xml', '/__sitemap__/zh-TW.xml'],
|
|||
|
|
failOnError: false
|
|||
|
|
},
|
|||
|
|
// 添加路由重写规则,使sitemap.xml直接使用预生成的站点地图
|
|||
|
|
routeRules: {
|
|||
|
|
'/sitemap.xml': {
|
|||
|
|
static: true
|
|||
|
|
},
|
|||
|
|
'/sitemap_index.xml': {
|
|||
|
|
static: true
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
// 图片配置
|
|||
|
|
image: {
|
|||
|
|
presets: {
|
|||
|
|
default: {
|
|||
|
|
modifiers: {
|
|||
|
|
quality: 80,
|
|||
|
|
format: 'webp',
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
// 站点配置 - 关键部分,用于站点地图生成
|
|||
|
|
site: {
|
|||
|
|
url: 'https://pinnovatecloud.com'
|
|||
|
|
},
|
|||
|
|
// 运行时配置
|
|||
|
|
runtimeConfig: {
|
|||
|
|
public: {
|
|||
|
|
siteUrl: 'https://pinnovatecloud.com'
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
seo: {
|
|||
|
|
sitemap: {
|
|||
|
|
sitemapName: 'sitemap.xml',
|
|||
|
|
autoLastmod: true,
|
|||
|
|
xsl: true,
|
|||
|
|
// 确保在构建时生成站点地图
|
|||
|
|
cacheTtl: 1,
|
|||
|
|
strictNuxtContentPaths: true,
|
|||
|
|
// 多语言支持
|
|||
|
|
i18n: {
|
|||
|
|
locales: ['zh', 'en', 'zh-TW'],
|
|||
|
|
defaultLocale: 'zh'
|
|||
|
|
},
|
|||
|
|
// 解决文件vs目录问题
|
|||
|
|
runtimeCacheStorage: {
|
|||
|
|
driver: 'memory',
|
|||
|
|
},
|
|||
|
|
// 确保生成静态文件而不是目录
|
|||
|
|
trailingSlash: false,
|
|||
|
|
// 防止重复路径
|
|||
|
|
skipUnresolvedRoutes: true,
|
|||
|
|
excludeURLs: [
|
|||
|
|
/\/zh-TW\/zh-TW/,
|
|||
|
|
/\/en\/en/,
|
|||
|
|
/\/zh\/zh/
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
render: {
|
|||
|
|
compressor: {
|
|||
|
|
threshold: 0,
|
|||
|
|
gzip: true,
|
|||
|
|
brotli: true,
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
postcss: {
|
|||
|
|
plugins: {
|
|||
|
|
cssnano: {},
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
app: {
|
|||
|
|
head: {
|
|||
|
|
script: [
|
|||
|
|
{
|
|||
|
|
src: 'https://www.googletagmanager.com/gtag/js?id=G-KNJFL438C1',
|
|||
|
|
async: true,
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
innerHTML: `
|
|||
|
|
window.dataLayer = window.dataLayer || [];
|
|||
|
|
function gtag(){dataLayer.push(arguments);}
|
|||
|
|
gtag('js', new Date());
|
|||
|
|
gtag('config', 'G-KNJFL438C1');
|
|||
|
|
`,
|
|||
|
|
type: 'text/javascript',
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
innerHTML: `(function(d,w,c){if(w[c])return;var s=d.createElement('script');w[c]=function(){(w[c].z=w[c].z||[]).push(arguments);};s.async=true;s.src='https://static.ahc.ink/hecong.js';if(d.head)d.head.appendChild(s);})(document,window,'_AIHECONG');_AIHECONG('ini',{channelId:'9BgJ9p'});`,
|
|||
|
|
type: 'text/javascript',
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
link: [
|
|||
|
|
{ rel: 'icon', type: 'image/x-icon', href: 'favicon.ico' },
|
|||
|
|
{
|
|||
|
|
rel: 'stylesheet',
|
|||
|
|
href: 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css',
|
|||
|
|
},
|
|||
|
|
{ rel: 'preconnect', href: 'https://fonts.googleapis.com' },
|
|||
|
|
{
|
|||
|
|
rel: 'preconnect',
|
|||
|
|
href: 'https://fonts.gstatic.com',
|
|||
|
|
crossorigin: '',
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
rel: 'stylesheet',
|
|||
|
|
href: 'https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;600;700&display=swap',
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
i18n: {
|
|||
|
|
strategy: 'prefix_and_default',
|
|||
|
|
defaultLocale: 'zh',
|
|||
|
|
lazy: true,
|
|||
|
|
langDir: 'locales',
|
|||
|
|
locales: [
|
|||
|
|
{ code: 'zh', name: '简体中文', file: 'zh.json' },
|
|||
|
|
{ code: 'zh-TW', name: '繁體中文', file: 'zh-TW.json' },
|
|||
|
|
{ code: 'en', name: 'English', file: 'en.json' },
|
|||
|
|
],
|
|||
|
|
detectBrowserLanguage: {
|
|||
|
|
useCookie: true,
|
|||
|
|
cookieKey: 'i18n_redirected',
|
|||
|
|
alwaysRedirect: true,
|
|||
|
|
fallbackLocale: 'zh',
|
|||
|
|
},
|
|||
|
|
pages: {
|
|||
|
|
index: {
|
|||
|
|
zh: '/',
|
|||
|
|
en: '/en',
|
|||
|
|
'zh-TW': '/zh-TW',
|
|||
|
|
},
|
|||
|
|
about: {
|
|||
|
|
zh: '/about',
|
|||
|
|
en: '/en/about',
|
|||
|
|
'zh-TW': '/zh-TW/about',
|
|||
|
|
},
|
|||
|
|
contact: {
|
|||
|
|
zh: '/contact',
|
|||
|
|
en: '/en/contact',
|
|||
|
|
'zh-TW': '/zh-TW/contact',
|
|||
|
|
},
|
|||
|
|
solutions: {
|
|||
|
|
zh: '/solutions',
|
|||
|
|
en: '/en/solutions',
|
|||
|
|
'zh-TW': '/zh-TW/solutions',
|
|||
|
|
},
|
|||
|
|
products: {
|
|||
|
|
zh: '/products',
|
|||
|
|
en: '/en/products',
|
|||
|
|
'zh-TW': '/zh-TW/products',
|
|||
|
|
},
|
|||
|
|
cases: {
|
|||
|
|
zh: '/cases',
|
|||
|
|
en: '/en/cases',
|
|||
|
|
'zh-TW': '/zh-TW/cases',
|
|||
|
|
},
|
|||
|
|
tag: {
|
|||
|
|
zh: '/tag',
|
|||
|
|
en: '/en/tag',
|
|||
|
|
'zh-TW': '/zh-TW/tag',
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
},
|
|||
|
|
target: 'static',
|
|||
|
|
// 添加清理选项,避免目录不为空错误
|
|||
|
|
build: {
|
|||
|
|
emptyOutDir: true,
|
|||
|
|
},
|
|||
|
|
// Vite配置
|
|||
|
|
vite: {
|
|||
|
|
plugins: [
|
|||
|
|
compression({
|
|||
|
|
algorithm: 'gzip', // 支持 gzip、brotliCompress 等
|
|||
|
|
ext: '.gz', // 默认 .gz
|
|||
|
|
threshold: 1024, // 超过 1kb 才压缩
|
|||
|
|
deleteOriginFile: false, // 是否删除原始文件
|
|||
|
|
}),
|
|||
|
|
],
|
|||
|
|
// 构建优化配置
|
|||
|
|
build: {
|
|||
|
|
minify: 'terser',
|
|||
|
|
terserOptions: {
|
|||
|
|
compress: {
|
|||
|
|
drop_console: true, // 生产环境移除console
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
},
|
|||
|
|
});
|