fenghe-auction/nuxt.config.js
2025-04-10 15:47:40 +08:00

193 lines
4.4 KiB
JavaScript

import dotenv from 'dotenv'
import process from 'node:process'
import imagemin from 'vite-plugin-imagemin'
import { currentLocales } from './i18n/i18n'
import fs from 'fs'
import path from 'path'
const envFile = process.env.ENV_FILE || '.env.test'
dotenv.config({ path: `./env/${envFile}` })
const publicConfig = Object.entries(process.env)
.filter(([key]) => key.startsWith('NUXT_PUBLIC_'))
.reduce((config, [key, value]) => {
config[key] = value
return config
}, {})
let httpsOptions = {}
try {
// 读取文件并转换为字符串
const key = fs.readFileSync(path.resolve(__dirname, 'ssl/localhost-key.pem'), 'utf-8')
const cert = fs.readFileSync(path.resolve(__dirname, 'ssl/localhost.pem'), 'utf-8')
httpsOptions = { key, cert }
} catch (error) {
// 失败时使用HTTP
httpsOptions = false
}
export default defineNuxtConfig({
modules: [
'@vant/nuxt',
'@unocss/nuxt',
'@nuxtjs/i18n'
],
runtimeConfig: {
// 私有配置,只有在服务端可用
apiSecret: process.env.NUXT_API_SECRET,
// 公共配置,客户端和服务端都可用
public: publicConfig,
},
css: [
'@unocss/reset/tailwind.css',
'@/static/styles/default-theme.css',
],
postcss: {
plugins: {
'autoprefixer': {},
'postcss-px-to-viewport': {
viewportWidth: 375, // 设计稿宽度
viewportUnit: 'vmin', // 关键配置
fontViewportUnit: 'vmin', // 字体单位
unitPrecision: 5,
propList: ['*'],
selectorBlackList: [],
minPixelValue: 1,
mediaQuery: false,
exclude: /@nuxt/
}
},
},
i18n: {
locales: currentLocales,
lazy: true,
strategy: 'no_prefix',
detectBrowserLanguage: {
useCookie: false,
cookieKey: 'i18n_redirected',
redirectOn: 'root',
alwaysRedirect: true,
},
defaultLocale: 'zh-CN',
vueI18n: './i18n/i18n.config.ts',
},
app: {
layoutTransition: {
name: 'layout',
mode: 'out-in'
},
head: {
viewport: 'width=device-width,initial-scale=1,viewport-fit=cover',
link: [
{ rel: 'icon', href: '/favicon.ico', sizes: 'any' },
],
// stripe支付CDN引用
script: [
{
src: 'https://js.stripe.com/v3/',
defer: true // 可选,建议添加 defer
}
],
meta: [
{ name: 'viewport', content: 'width=device-width, initial-scale=1, viewport-fit=cover,user-scalable=no' },
{ name: 'apple-mobile-web-app-capable', content: 'yes' },
{ name: 'apple-mobile-web-app-status-bar-style', content: 'black-translucent' },
{ name: 'theme-color', media: '(prefers-color-scheme: light)', content: '#ffffff' },
{ name: 'theme-color', media: '(prefers-color-scheme: dark)', content: '#222222' },
],
},
},
nitro: {
externals: {
inline: ['tslib'] // 将 tslib 内联到构建中
}
},
build: {
transpile: ['tslib'] // 确保 tslib 被正确转译
},
vite: {
build: {
target: 'esnext',
minify: 'terser',
terserOptions: {
compress: {
drop_console: true, // 移除 console
drop_debugger: true, // 移除 debugger
}
}
},
optimizeDeps: {
include: [
'@intlify/core-base',
'@intlify/shared',
'is-https',
],
},
plugins: [
imagemin({
gifsicle: {
optimizationLevel: 7,
interlaced: false
},
optipng: {
optimizationLevel: 7
},
mozjpeg: {
quality: 70
},
pngquant: {
quality: [0.8, 0.9],
speed: 4
},
svgo: {
plugins: [
{
name: 'removeViewBox'
},
{
name: 'removeEmptyAttrs',
active: false
}
]
}
})
]
},
experimental: {
typedPages: true,
},
devtools: {
vscode: {
// 配置为 cursor 编辑器
editor: 'cursor'
},
enabled: true
},
typescript: {
shim: false,
},
features: {
// For UnoCSS
inlineStyles: false,
},
future: {
compatibilityVersion: 4,
},
// 指定 Nuxt 应用程序的兼容性日期,确保应用程序在未来的 Nuxt 版本中保持稳定性
compatibilityDate: '2025-02-28',
devServer: {
// https: httpsOptions,
host: '0.0.0.0',
port: 3000,
},
})