react-raika
Version:
react-starter
78 lines (61 loc) • 2.41 kB
JavaScript
import { execSync } from 'node:child_process';
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
// Convert `__dirname` for ES Module compatibility
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const projectName = process.argv[2];
if (!projectName) {
console.error('❌ Please specify the project name.');
console.error('Example: npx react-rayka my-app');
process.exit(1);
}
const targetDir = path.resolve(process.cwd(), projectName);
if (fs.existsSync(targetDir)) {
console.error('❌ Directory already exists. Please choose a different name.');
process.exit(1);
}
console.log('🚀 Creating your React app...');
try {
// Clone the boilerplate repository
execSync(
`git clone https://github.com/Mobinafshari/react-boilerplate.git ${projectName}`,
{ stdio: 'inherit' }
);
// Navigate to the project directory
process.chdir(targetDir);
// Remove the .git folder to reset version control
fs.rmSync('.git', { recursive: true, force: true });
// Remove the README.md file
const readmePath = path.join(targetDir, 'README.md');
if (fs.existsSync(readmePath)) {
fs.rmSync(readmePath);
}
// Clear the CHANGELOG.md file
fs.writeFileSync('CHANGELOG.md', '');
// Update the project name in package.json
const packageJsonPath = path.join(targetDir, 'package.json');
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
// Update package.json fields
packageJson.name = projectName;
packageJson.version = '0.0.0'; // Clear version
delete packageJson.description; // Clear description
delete packageJson.main; // Remove main field
delete packageJson.bin; // Remove bin field
delete packageJson.keywords;
// Save the updated package.json
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
// Install dependencies
console.log('📦 Installing dependencies...');
execSync('npm install --legacy-peer-deps', { stdio: 'inherit' });
execSync('npm uninstall rimraf --legacy-peer-deps', { stdio: 'inherit' });
console.log('✅ React app created successfully!');
console.log('👉 Next steps:');
console.log(` 1. cd ${projectName}`);
console.log(' 3. Happy coding! 🚀');
} catch (error) {
console.error('❌ An error occurred:', error.message);
process.exit(1);
}