@strapi/strapi
Version:
An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite
114 lines (111 loc) • 3.35 kB
JavaScript
import browserslistToEsbuild from 'browserslist-to-esbuild';
import react from '@vitejs/plugin-react-swc';
import { getUserConfig } from '../core/config.mjs';
import { loadStrapiMonorepo } from '../core/monorepo.mjs';
import { getMonorepoAliases } from '../core/aliases.mjs';
import { buildFilesPlugin } from './plugins.mjs';
const resolveBaseConfig = async (ctx)=>{
const target = browserslistToEsbuild(ctx.target);
return {
root: ctx.cwd,
base: ctx.basePath,
build: {
emptyOutDir: false,
outDir: ctx.distDir,
target
},
cacheDir: 'node_modules/.strapi/vite',
configFile: false,
define: {
'process.env': ctx.env
},
envPrefix: 'STRAPI_ADMIN_',
optimizeDeps: {
include: [
// pre-bundle React dependencies to avoid React duplicates,
// even if React dependencies are not direct dependencies
// https://react.dev/warnings/invalid-hook-call-warning#duplicate-react
'react',
`react/jsx-runtime`,
'react-dom/client',
'styled-components',
'react-router-dom'
]
},
resolve: {
// https://react.dev/warnings/invalid-hook-call-warning#duplicate-react
dedupe: [
'react',
'react-dom',
'react-router-dom',
'styled-components'
]
},
plugins: [
react(),
buildFilesPlugin(ctx)
]
};
};
const resolveProductionConfig = async (ctx)=>{
const { options: { minify, sourcemaps } } = ctx;
const baseConfig = await resolveBaseConfig(ctx);
return {
...baseConfig,
logLevel: 'silent',
mode: 'production',
build: {
...baseConfig.build,
assetsDir: '',
minify,
sourcemap: sourcemaps,
rollupOptions: {
input: {
strapi: ctx.entry
}
}
}
};
};
const resolveDevelopmentConfig = async (ctx)=>{
const monorepo = await loadStrapiMonorepo(ctx.cwd);
const baseConfig = await resolveBaseConfig(ctx);
return {
...baseConfig,
mode: 'development',
resolve: {
...baseConfig.resolve,
alias: {
...baseConfig.resolve?.alias,
...getMonorepoAliases({
monorepo
})
}
},
server: {
cors: false,
middlewareMode: true,
open: ctx.options.open,
hmr: {
overlay: false,
server: ctx.options.hmrServer,
clientPort: ctx.options.hmrClientPort
}
},
appType: 'custom'
};
};
const USER_CONFIGS = [
'vite.config.js',
'vite.config.mjs',
'vite.config.ts'
];
const mergeConfigWithUserConfig = async (config, ctx)=>{
const userConfig = await getUserConfig(USER_CONFIGS, ctx);
if (userConfig) {
return userConfig(config);
}
return config;
};
export { mergeConfigWithUserConfig, resolveDevelopmentConfig, resolveProductionConfig };
//# sourceMappingURL=config.mjs.map