create-node-template
Version:
Create node.js or express boilerplate with one command
62 lines • 2.51 kB
JavaScript
import { existsSync } from 'fs';
import { basename, resolve } from 'path';
import { cyan, getSuccessString, logRecNextSteps, red, unknownHasProperty } from '../../utils/index.js';
import { isFolderEmpty } from './helpers/is-folder-empty.js';
import { notifyUpdate } from './helpers/misc.js';
import { getPackageManager, getProjectName, getTemplate } from './helpers/prompts.js';
import { program } from './program.js';
import { createApp } from './createApp.js';
export const runWithCommander = async () => {
// const conf = new Conf({ projectName: 'create-node-template' });
const nameOrEmptyString = program.processedArgs[0] || '';
/* trim and check name */
const name = await getProjectName(nameOrEmptyString);
const { template, importAlias, packageManager, resetPreferences } = program.opts();
// if (resetPreferences) {
// conf.clear();
// console.log(`Preferences reset successfully`);
// return;
// }
/**
* Verify the project dir is empty if it already exists
*/
const projectPath = resolve(name);
const projectName = basename(projectPath);
const folderExists = existsSync(projectPath);
if (folderExists && !isFolderEmpty(projectPath, projectName)) {
console.log('Please make sure the directory is empty before proceeding.');
process.exit(1);
}
const pm = await getPackageManager(packageManager);
const temp = await getTemplate(template);
// const preferences = (conf.get('preferences') || {}) as Record<string, boolean | string>;
// const getPrefOrDefault = (field: string) => preferences[field] ?? defaults[field];
// conf.set('preferences', preferences);
try {
await createApp({
projectName,
template: temp,
packageManager: pm,
importAlias,
});
const succesString = getSuccessString(projectName, temp);
console.log(succesString);
logRecNextSteps(projectName, pm);
notifyUpdate();
}
catch (error) {
console.log();
console.log('Aborting installation.');
if (unknownHasProperty(error, 'command')) {
console.log(` ${cyan(error.command)} has failed.`);
}
else {
console.log(red('Unexpected error. Please report it as a bug:') + '\n', error);
}
console.log();
// await notifyUpdate(packageManager);
notifyUpdate();
process.exit(1);
}
};
//# sourceMappingURL=index.js.map