PinnovateCloud/nuxt.config.ts

230 lines
6.0 KiB
TypeScript
Raw Normal View History

2025-09-11 10:55:59 +08:00
// @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://www.pinnovatecloud.com",
},
// 运行时配置
runtimeConfig: {
public: {
siteUrl: "https://www.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: [
// Google tag (gtag.js)
{
src: "https://www.googletagmanager.com/gtag/js?id=G-MWSDDVNXRQ",
async: true,
},
{
children: `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-MWSDDVNXRQ');
`,
type: "text/javascript",
},
// Google Tag Manager
{
children: `
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-NHN59C23');
`,
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:'Lu05eK'});`,
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
},
},
},
},
});