gen-express-cli
Version:
A simple express cli to generate express app simply by running a command, similar to express-generator
52 lines (43 loc) • 2.1 kB
JavaScript
import { createSpinner } from 'nanospinner';
import { createBase } from './createBase.js';
import { createLinter } from './createLinter.js';
import { createPackageJson } from './createPackageJson.js';
import { createDocker } from './createDocker.js';
import { createJsConfig } from './createJsConfig.js';
import { createTsConfig } from './createTsConfig.js';
import { createUnitTest } from './createUnitTest.js';
import { runCommand } from '../utils/exec.js';
async function createStructure({ projectName, template, linter, unitTest, docker, alias }) {
try {
await createBase(projectName, template, alias);
await createPackageJson(projectName, template, linter, unitTest, alias);
if (linter) await createLinter(projectName, template, unitTest);
if (docker) await createDocker(projectName, template);
if (template === 'typescript') await createTsConfig(projectName, unitTest, alias);
if (template === 'javascript' && alias) await createJsConfig(projectName);
if (unitTest === 'jest') await createUnitTest(projectName, template, unitTest, alias);
} catch (error) {
throw error;
}
}
async function installDependencies(projectName, projectManager, linter) {
if (projectManager === 'npm') {
await runCommand(`cd ${projectName} && npm install && cd ..`);
if (linter) await runCommand(`cd ${projectName} && npm run format && cd ..`);
} else if (projectManager === 'yarn') {
await runCommand(`cd ${projectName} && yarn && cd ..`);
if (linter) await runCommand(`cd ${projectName} && yarn format && cd ..`);
}
}
export default async function createProject({ projectName, template, projectManager, linter, unitTest, docker, alias }) {
const spinner = createSpinner('Creating project...');
try {
spinner.start();
await createStructure({ projectName, template, linter, unitTest, docker, alias });
await installDependencies(projectName, projectManager, linter);
spinner.success({ text: 'Project created successfully' });
} catch (error) {
spinner.error({ text: 'Failed to create project' });
throw error;
}
}