create-pocketflow
Version:
CLI tool to create PocketFlow projects
89 lines (76 loc) • 3.33 kB
JavaScript
const path = require('path');
const fs = require('fs-extra');
const chalk = require('chalk');
const inquirer = require('inquirer');
const { program } = require('commander');
program
.name('create-pocketflow')
.description('Create a new PocketFlow project')
.argument('[project-directory]', 'Project directory name')
.action(async (projectDir) => {
try {
// Ask for project name if not provided
if (!projectDir) {
const answers = await inquirer.prompt([
{
type: 'input',
name: 'projectDir',
message: 'What is your project named?',
default: 'my-pocketflow-app'
}
]);
projectDir = answers.projectDir;
}
const targetDir = path.resolve(process.cwd(), projectDir);
// Check if directory exists
if (fs.existsSync(targetDir)) {
const { overwrite } = await inquirer.prompt([
{
type: 'confirm',
name: 'overwrite',
message: `Directory ${projectDir} already exists. Do you want to overwrite it?`,
default: false
}
]);
if (!overwrite) {
console.log(chalk.red('Operation cancelled'));
process.exit(1);
}
await fs.remove(targetDir);
}
// Create project directory
await fs.ensureDir(targetDir);
// Copy template
const templateDir = path.resolve(__dirname, '../template/typescript');
console.log(chalk.blue(`Creating a new PocketFlow project in ${chalk.green(targetDir)}...`));
await fs.copy(templateDir, targetDir);
// Update package.json in the new project
const pkgJsonPath = path.join(targetDir, 'package.json');
const pkgJson = await fs.readJson(pkgJsonPath);
pkgJson.name = projectDir.toLowerCase().replace(/\s+/g, '-');
await fs.writeJson(pkgJsonPath, pkgJson, { spaces: 2 });
console.log();
console.log(chalk.green('Success!'), 'Created', chalk.cyan(projectDir), 'at', chalk.cyan(targetDir));
console.log();
console.log('Inside that directory, you can run several commands:');
console.log();
console.log(chalk.cyan(' npm install'));
console.log(' Install the dependencies');
console.log();
console.log(chalk.cyan(' npm run dev'));
console.log(' Starts the development server');
console.log();
console.log('We suggest that you begin by typing:');
console.log();
console.log(chalk.cyan(' cd'), projectDir);
console.log(chalk.cyan(' npm install'));
console.log(chalk.cyan(' npm run dev'));
console.log();
console.log('Happy coding!');
} catch (error) {
console.error(chalk.red('Error:'), error.message);
process.exit(1);
}
});
program.parse(process.argv);