94 lines
2.4 KiB
TypeScript
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: '/',
|
|
}
|
|
}
|
|
}) |