mns-mini-zabor/nuxt.config.ts

94 lines
2.4 KiB
TypeScript

// https://nuxt.com/docs/api/configuration/nuxt-config
import fs from 'fs/promises'
import chalk from 'chalk';
import imagemin from 'imagemin';
import imageminPngquant from 'imagemin-pngquant';
export default defineNuxtConfig({
hooks: {
'nitro:build:public-assets': async (nitro) => {
console.log(`😈 custom hook imagemin in ${nitro.options.output.publicDir}`)
const output_path = nitro.options.output.publicDir
const filelist = await fs.readdir(output_path, { recursive: true });
for (let index = 0; index < filelist.length; index++) {
const element = filelist[index];
const elementFile = await fs.lstat(`${output_path}/${element}`)
if (element.startsWith('_nuxt')) continue
if (elementFile.isFile()) {
if (element.endsWith('.png')) {
const dest = `${output_path}/${element.split('/').slice(0, -1).join('/')}`
const res = await imagemin([`${output_path}/${element}`], {
destination: dest,
plugins: [
imageminPngquant({
quality: [0.6, 0.8]
})
]
})
if (res.length) {
console.log(chalk.gray(` compress PNG ${output_path}/${element}`))
}
}
}
}
}
},
app: {
pageTransition: { name: 'page', mode: 'out-in' },
head: {
viewport: 'width=device-width, initial-scale=1',
htmlAttrs: {
lang: 'ru',
},
},
},
vue: {
compilerOptions: {
isCustomElement: (tag) => ['nobr'].includes(tag),
}
},
ssr: true,
modules: [
'@nuxtjs/tailwindcss',
"@nuxt/image",
"nuxt-icon",
"nuxt-svgo",
'@tresjs/nuxt',
'@nuxtjs/robots',
'@artmizu/yandex-metrika-nuxt',
"@nuxtjs/sitemap"
],
runtimeConfig: {
public: {
apiBase: 'https://mns.kustarshina.ru/kp',
imgBase: 'https://mns.kustarshina.ru',
baseUrl: '',
yandexMetrika: {
id: 0
},
}
},
routeRules: {
'/index.html': { redirect: '/' },
'/index.php': { redirect: '/' },
},
nitro: {
minify: false,
prerender: {
crawlLinks: false
},
},
vite: {
assetsInclude: ['**/*.glb', '**/*.gltf'],
build: {
// minify: 'esbuild'
minify: false
},
},
robots: {
rules: {
UserAgent: '*',
// Disallow: '/',
}
}
})