@jpapini/webpack-config
Version:
Custom Webpack configuration for bundling projects.
42 lines (33 loc) • 1.39 kB
text/typescript
import { colors, logger } from '@jpapini/logger';
import { NodeEnv } from './enums';
import type { WebpackEnv } from './types';
import { loadDotenv } from './utils/dotenv.util';
import { shorternPath } from './utils/shortern-path.util';
export function loadEnvVars(rootDir: string, env?: WebpackEnv) {
const loadedEnvFiles = loadDotenv(rootDir);
logger.info('Loading environment variables from:');
if (loadedEnvFiles.length === 0) {
logger.log(' -', colors.red('No environment files found'));
} else {
loadedEnvFiles.forEach((file) => {
logger.log(' -', colors.blue(shorternPath(file, rootDir)));
});
}
process.env.NODE_ENV ??= env?.WEBPACK_SERVE ? NodeEnv.DEVELOPMENT : NodeEnv.PRODUCTION;
if (!(Object.values(NodeEnv) as string[]).includes(process.env.NODE_ENV)) {
throw new Error(
`Invalid NODE_ENV: ${process.env.NODE_ENV}. Valid values are: ${Object.values(NodeEnv).join(', ')}`,
);
}
if (!process.env.PUBLIC_URL) throw new Error('PUBLIC_URL environment variable is required');
let publicUrl: URL;
try {
publicUrl = new URL(process.env.PUBLIC_URL);
} catch {
throw new Error(`Invalid PUBLIC_URL: ${process.env.PUBLIC_URL}. Must be a valid URL`);
}
return {
nodeEnv: process.env.NODE_ENV as NodeEnv,
publicUrl,
};
}