import { NuxtConfig } from '@nuxt/types'; import { NuxtOptionsRouter } from '@nuxt/types/config/router'; import cors from 'cors'; import lodash from 'lodash'; import { extendbuild } from './build'; import { EnumMamba, MambaConfig } from './enum'; import { extendRoutes } from './routes'; export default (nuxtConfig: NuxtConfig & { mamba?: Partial } = {}) => { const env = lodash.get(nuxtConfig, EnumMamba.envPath, {}); // 环境变量 nuxtConfig.env = lodash.assign(env, nuxtConfig.env); // 路由 lodash.update(nuxtConfig, 'router', (router: NuxtOptionsRouter) => { if (lodash.isEmpty(router)) { router = {}; } if (!router.base && env.base) { router.base = env.base; } return lodash.assign({ extendRoutes }, router); }); // generate 静态化配置 nuxtConfig.generate = lodash.assign({ dir: env.BuildDir }, nuxtConfig.generate); // 组件 自动注册 nuxtConfig.components = lodash.defaultTo(nuxtConfig.components, [ { path: '~/components', extensions: ['vue'], ignore: ['**/+(view|views|inject|mambas)/**.vue', '+(view|views|inject|mambas)/**/**.vue'], }, ]); // 构建插件 nuxtConfig.buildModules = lodash.compact( lodash.concat( [ // https://go.nuxtjs.dev/typescript '@nuxt/typescript-build', // '@nuxtjs/style-resources', '@nuxtjs/composition-api/module', ], nuxtConfig.buildModules, ), ); // Modules: https://go.nuxtjs.dev/config-modules nuxtConfig.modules = lodash.compact(lodash.concat(['@nuxtjs/proxy'], nuxtConfig.modules)); // 文档地址 https://www.tailwindcss.cn/docs/functions-and-directives if (lodash.has(nuxtConfig, EnumMamba.tailwindcss)) { nuxtConfig.modules = lodash.concat(['@nuxtjs/tailwindcss'], nuxtConfig.modules); } // 加载 nuxtConfig.loadingIndicator = lodash.assign( { name: 'circle', color: '#097276', background: '#f7f3f0', }, nuxtConfig.loadingIndicator, ); // 关闭ssr if (!lodash.has(nuxtConfig, 'ssr')) { nuxtConfig.ssr = false; } // Target: https://go.nuxtjs.dev/config-target if (!lodash.has(nuxtConfig, 'target')) { nuxtConfig.target = 'static'; } // 打开cors if (!lodash.has(nuxtConfig, 'hooks.render.setupMiddleware')) { lodash.set(nuxtConfig, 'hooks.render.setupMiddleware', (app) => { app.use(cors()); }); } // build webpack nuxtConfig.build = extendbuild(nuxtConfig); if (lodash.get(nuxtConfig, EnumMamba.debug)) { console.log('LENG ~ NuxtConfig', nuxtConfig); } lodash.unset(nuxtConfig, EnumMamba.key); return nuxtConfig; };