181 lines
3.4 KiB
TypeScript
181 lines
3.4 KiB
TypeScript
import config from './config'
|
|
|
|
// https://nuxt.com/docs/api/configuration/nuxt-config
|
|
export default defineNuxtConfig({
|
|
app: {
|
|
head: {
|
|
htmlAttrs: {
|
|
lang: config.locale || 'en',
|
|
},
|
|
link: [
|
|
{
|
|
rel: 'icon',
|
|
type: 'image/x-icon',
|
|
href: '/favicon.ico',
|
|
},
|
|
],
|
|
meta: [
|
|
{
|
|
charset: 'utf-8',
|
|
},
|
|
{
|
|
name: 'viewport',
|
|
content: 'width=device-width, initial-scale=1',
|
|
},
|
|
{
|
|
'http-equiv': 'X-UA-Compatible',
|
|
content: 'ie=edge',
|
|
},
|
|
],
|
|
},
|
|
pageTransition: { name: 'page', mode: 'out-in' },
|
|
rootId: 'ender-app',
|
|
},
|
|
colorMode: {
|
|
preference: 'system',
|
|
fallback: 'dark',
|
|
classPrefix: '',
|
|
classSuffix: '',
|
|
componentName: 'NuxtTheme',
|
|
storageKey: 'ecmatheme',
|
|
},
|
|
components: {
|
|
dirs: [
|
|
{
|
|
path: '~/components',
|
|
pathPrefix: false,
|
|
extensions: ['.vue'],
|
|
},
|
|
],
|
|
},
|
|
content: {
|
|
markdown: {
|
|
remarkPlugins: ['remark-reading-time'],
|
|
},
|
|
highlight: {
|
|
theme: {
|
|
default: 'github-dark',
|
|
light: 'github-light',
|
|
sepia: 'monokai',
|
|
},
|
|
langs: [
|
|
'shell',
|
|
'batch',
|
|
'vb',
|
|
'ini',
|
|
'asm',
|
|
'c',
|
|
'cpp',
|
|
'java',
|
|
'python',
|
|
'csv',
|
|
'xml',
|
|
'json',
|
|
'yaml',
|
|
'html',
|
|
'css',
|
|
'sass',
|
|
'php',
|
|
'js',
|
|
'ts',
|
|
'vue',
|
|
'md',
|
|
'mdc',
|
|
'pascal',
|
|
'lisp',
|
|
'sql',
|
|
],
|
|
},
|
|
},
|
|
css: ['~/assets/styles/main.scss'],
|
|
devtools: {
|
|
enabled: true,
|
|
},
|
|
experimental: {
|
|
inlineRouteRules: true,
|
|
},
|
|
features: {
|
|
inlineStyles: false,
|
|
},
|
|
googleFonts: {
|
|
download: true,
|
|
families: {
|
|
Lato: true,
|
|
Alexandria: true,
|
|
},
|
|
},
|
|
modules: [
|
|
'@pinia/nuxt',
|
|
'@nuxt/image',
|
|
'@nuxt/content',
|
|
'@nuxtjs/seo',
|
|
'@nuxtjs/google-fonts',
|
|
'@nuxtjs/tailwindcss',
|
|
'@nuxtjs/color-mode',
|
|
'@nuxt/eslint',
|
|
['@nuxtjs/stylelint-module', { failOnError: true, lintOnStart: false }],
|
|
],
|
|
nitro: {
|
|
prerender: {
|
|
crawlLinks: true,
|
|
autoSubfolderIndex: true,
|
|
failOnError: true,
|
|
routes: ['/robots.txt', '/sitemap.xml'],
|
|
},
|
|
},
|
|
linkChecker: {
|
|
failOnError: true,
|
|
report: {
|
|
html: true,
|
|
markdown: true,
|
|
},
|
|
},
|
|
plugins: [],
|
|
robots: {
|
|
enabled: true,
|
|
blockNonSeoBots: false,
|
|
credits: false,
|
|
debug: false,
|
|
metaTag: true,
|
|
groups: [],
|
|
disallow: [' '],
|
|
},
|
|
site: {
|
|
env: process.env.NODE_ENV,
|
|
url: config.url,
|
|
name: config.name,
|
|
indexable: true,
|
|
trailingSlash: false,
|
|
},
|
|
sitemap: {
|
|
sources: ['/api/__sitemap__/content'],
|
|
cacheMaxAgeSeconds: 360,
|
|
exclude: [],
|
|
credits: false,
|
|
xslColumns: [
|
|
{ label: 'URL', width: '50%' },
|
|
{ label: 'Last Modified', select: 'sitemap:lastmod', width: '25%' },
|
|
{ label: 'Priority', select: 'sitemap:priority', width: '12.5%' },
|
|
{
|
|
label: 'Change Frequency',
|
|
select: 'sitemap:changefreq',
|
|
width: '12.5%',
|
|
},
|
|
],
|
|
defaults: {
|
|
lastmod: config.build.date,
|
|
},
|
|
},
|
|
tailwindcss: {
|
|
exposeConfig: true,
|
|
},
|
|
typescript: {
|
|
typeCheck: true,
|
|
},
|
|
vue: {
|
|
compilerOptions: {
|
|
isCustomElement: (tag) => tag === 'iconify-icon',
|
|
},
|
|
},
|
|
})
|