PinnovateCloud/nuxt.config.ts
2025-09-11 10:55:59 +08:00

230 lines
6.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// @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
},
},
},
},
});