150 lines
3.3 KiB
TypeScript
150 lines
3.3 KiB
TypeScript
// https://nuxt.com/docs/api/configuration/nuxt-config
|
|
export default defineNuxtConfig({
|
|
modules: [
|
|
"@nuxt/ui",
|
|
"@nuxtjs/i18n",
|
|
"@nuxt/eslint",
|
|
"@vite-pwa/nuxt",
|
|
],
|
|
|
|
devtools: { enabled: true },
|
|
|
|
pwa: {
|
|
registerType: "autoUpdate",
|
|
manifest: {
|
|
name: "Riwa应用商店",
|
|
short_name: "Riwa应用商店",
|
|
description: "Riwa App 下载 - iOS, Android, H5",
|
|
theme_color: "#3b82f6",
|
|
background_color: "#ffffff",
|
|
display: "standalone",
|
|
scope: "/",
|
|
start_url: "/",
|
|
icons: [
|
|
{
|
|
src: "/riwsan.png",
|
|
sizes: "192x192",
|
|
type: "image/png",
|
|
},
|
|
],
|
|
},
|
|
workbox: {
|
|
navigateFallback: "/",
|
|
globPatterns: ["**/*.{js,css,html,png,svg,ico,jpg}"],
|
|
cleanupOutdatedCaches: true,
|
|
runtimeCaching: [
|
|
{
|
|
urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i,
|
|
handler: "CacheFirst",
|
|
options: {
|
|
cacheName: "google-fonts-cache",
|
|
expiration: {
|
|
maxEntries: 10,
|
|
maxAgeSeconds: 60 * 60 * 24 * 365, // 1 year
|
|
},
|
|
cacheableResponse: {
|
|
statuses: [0, 200],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
urlPattern: /^https:\/\/fonts\.gstatic\.com\/.*/i,
|
|
handler: "CacheFirst",
|
|
options: {
|
|
cacheName: "gstatic-fonts-cache",
|
|
expiration: {
|
|
maxEntries: 10,
|
|
maxAgeSeconds: 60 * 60 * 24 * 365, // 1 year
|
|
},
|
|
cacheableResponse: {
|
|
statuses: [0, 200],
|
|
},
|
|
},
|
|
},
|
|
],
|
|
},
|
|
client: {
|
|
installPrompt: true,
|
|
periodicSyncForUpdates: 3600,
|
|
},
|
|
devOptions: {
|
|
enabled: true,
|
|
type: "module",
|
|
},
|
|
injectManifest: {
|
|
globPatterns: ["**/*.{js,css,html,png,svg,ico}"],
|
|
},
|
|
},
|
|
|
|
css: [
|
|
"~/assets/css/main.css",
|
|
"~/assets/css/animations.css",
|
|
],
|
|
|
|
colorMode: {
|
|
preference: "light",
|
|
},
|
|
|
|
i18n: {
|
|
defaultLocale: "zh-CN",
|
|
locales: [
|
|
{
|
|
code: "zh-CN",
|
|
name: "简体中文",
|
|
file: "zh-CN.json",
|
|
},
|
|
{
|
|
code: "en-US",
|
|
name: "English",
|
|
file: "en-US.json",
|
|
},
|
|
],
|
|
strategy: "no_prefix",
|
|
detectBrowserLanguage: {
|
|
useCookie: true,
|
|
cookieKey: "i18n_locale",
|
|
redirectOn: "root",
|
|
},
|
|
},
|
|
|
|
app: {
|
|
head: {
|
|
charset: "utf-8",
|
|
viewport: "width=device-width, initial-scale=1",
|
|
title: "Riwa App 下载",
|
|
meta: [
|
|
{ name: "description", content: "Riwa App 下载 - iOS, Android, H5" },
|
|
],
|
|
link: [
|
|
{ rel: "icon", type: "image/png", href: "/riwsan.png" },
|
|
],
|
|
},
|
|
},
|
|
|
|
devServer: {
|
|
host: "0.0.0.0",
|
|
},
|
|
|
|
nitro: {
|
|
prerender: {
|
|
routes: ["/"],
|
|
crawlLinks: true,
|
|
},
|
|
},
|
|
|
|
hooks: {
|
|
"nitro:config": async function (nitroConfig) {
|
|
// 预渲染所有应用详情页
|
|
const { apps } = await import("./data/apps");
|
|
const routes = apps.map(app => `/apps/${app.id}`);
|
|
nitroConfig.prerender = nitroConfig.prerender || {};
|
|
nitroConfig.prerender.routes = [
|
|
...(nitroConfig.prerender.routes || []),
|
|
...routes,
|
|
];
|
|
},
|
|
},
|
|
|
|
compatibilityDate: "2025-12-30",
|
|
});
|