Skip to content

Nuxt3 项目配置

对于 Nuxt3,很重要的一部分在于它的配置文件 nuxt.config.ts,该文件位于根目录

现在我们对其解释

TypeScript
// 下面的代码主要是用作更新 package.json 的 version,目的我们在前面的文档已经介绍
import fs from 'fs'
import path from 'path'

const packageJson = JSON.parse(
  fs.readFileSync(path.resolve(__dirname, 'package.json'), 'utf-8')
)
const appVersion = packageJson.version

// 下面的文件是整个 Nuxt3 App 的配置
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  // 关闭 devtools,因为它比较鸡肋
  devtools: {
    enabled: false
  },
  // 自定义开发服务器配置
  devServer: {
    host: '127.0.0.1',
    port: 1007
  },
  // 与 Nuxt3 相关的 modules
  modules: [
    '@pinia/nuxt',
    '@nuxt/image',
    '@nuxtjs/i18n',
    '@pinia-plugin-persistedstate/nuxt',
    'dayjs-nuxt',
    'nuxt-icon',
    '@vite-pwa/nuxt',
    'nuxt-typed-router',
    'nuxt-schema-org',
    '@nuxtjs/color-mode',
    // 这个 module 是我们自定义的 module,在以前的文档中提到过
    './modules/socket/module'
  ],
  // 运行时配置,在项目代码中使用 useRuntimeConfig() 可以获取这些变量
  runtimeConfig: {
    MONGODB_URL: process.env.MONGODB_URL,

    KUN_GALGAME_API: process.env.KUN_GALGAME_API,

    REDIS_HOST: process.env.REDIS_HOST,
    REDIS_PORT: process.env.REDIS_PORT,

    JWT_ISS: process.env.JWT_ISS,
    JWT_AUD: process.env.JWT_AUD,
    JWT_SECRET: process.env.JWT_SECRET,

    public: {
      KUN_GALGAME_URL: process.env.KUN_GALGAME_URL,
      KUN_VISUAL_NOVEL_VERSION: appVersion
    }
  },
  // Nuxt3 的自动导入,这些文件夹中所 export 的一切内容,无需手动 import xxx form 'xxx',可以直接使用
  imports: {
    dirs: ['./composables', './utils', './store/**/*.ts']
  },

  // 前端相关的配置

  // 指定预加载 scss 相关的目录
  css: ['~/assets/css/index.scss'],
  // vite 相关的配置
  vite: {
    esbuild: {
      // 打包时去掉 console 和 debugger
      drop: ['console', 'debugger']
    }
  },
  // piniaPersistedstate 的配置
  piniaPersistedstate: {
    cookieOptions: {
      maxAge: 60 * 60 * 24 * 7,
      sameSite: 'strict'
    }
  },
  // nuxt-i18n 相关配置
  i18n: {
    langDir: './language',
    locales: [
      {
        code: 'en-us',
        iso: 'en-US',
        file: 'en.json'
      },
      {
        code: 'zh-cn',
        iso: 'zh-CN',
        file: 'zh.json'
      }
    ],
    baseUrl: process.env.KUN_GALGAME_URL,
    defaultLocale: 'en-us',
    strategy: 'prefix_except_default',
    detectBrowserLanguage: {
      useCookie: true,
      cookieKey: 'kungalgame-language',
      redirectOn: 'root'
    }
  },
  // nuxt-color-mode 相关配置
  colorMode: {
    preference: 'system',
    fallback: 'light',
    hid: 'nuxt-color-mode-script',
    globalName: '__KUNGALGAME_COLOR_MODE__',
    componentName: 'ColorScheme',
    classPrefix: 'kun-',
    classSuffix: '-mode',
    storageKey: 'kungalgame-color-mode'
  },
  // PWA 相关配置
  pwa: {
    registerType: 'autoUpdate',
    // Disable pwa in development environment
    disable: process.env.NODE_ENV === 'development',
    manifest: {
      name: 'KUN Visual Novel',
      short_name: 'KunGal',
      theme_color: '#218bff',
      icons: [
        {
          src: 'pwa/pwa-192x192.png',
          sizes: '192x192',
          type: 'image/png'
        },
        {
          src: 'pwa/pwa-512x512.png',
          sizes: '512x512',
          type: 'image/png'
        },
        {
          src: 'pwa/pwa-512x512.png',
          sizes: '512x512',
          type: 'image/png',
          purpose: 'any maskable'
        }
      ]
    },
    workbox: {
      globPatterns: ['**/*.{js,css,png,webp,svg,ico}'],
      navigateFallback: null
    },
    client: {
      installPrompt: true
    },
    devOptions: {
      enabled: true,
      suppressWarnings: true,
      navigateFallbackAllowlist: [/^\/$/],
      type: 'module'
    }
  }
})

该文件可以直接使用,无需修改,可以查看 Nuxt 官网和某些插件的官网进行自定义配置