UNPKG

create-rnrad-app

Version:
91 lines (81 loc) 2.65 kB
const { execShellCommand, runCommand } = require('./utils.js'); const { consola } = require('consola'); const fs = require('fs-extra'); const path = require('path'); const initGit = async (projectName) => { await execShellCommand(`cd ${projectName} && git init && cd ..`); }; const installDeps = async (projectName) => { await runCommand(`cd ${projectName} && pnpm install`, { loading: 'Installing project dependencies', success: 'Dependencies installed', error: 'Failed to install dependencies, Make sure you have pnpm installed', }); }; // remove unnecessary files, such us .git, ios, android, docs, cli, LICENSE const removeFiles = async (projectName) => { const FILES_TO_REMOVE = [ '.git', 'README.md', 'ios', 'android', 'docs', 'cli', 'LICENSE', ]; FILES_TO_REMOVE.forEach((file) => { fs.removeSync(path.join(process.cwd(), `${projectName}/${file}`)); }); }; // Update package.json infos, name and set version to 0.0.1 + add initial version to osMetadata const updatePackageInfos = async (projectName) => { const packageJsonPath = path.join( process.cwd(), `${projectName}/package.json` ); const packageJson = fs.readJsonSync(packageJsonPath); packageJson.osMetadata = { initVersion: packageJson.version }; packageJson.version = '0.0.1'; packageJson.name = projectName?.toLowerCase(); packageJson.repository = { type: 'git', url: 'git+https://github.com/user/repo-name.git', }; fs.writeJsonSync(packageJsonPath, packageJson, { spaces: 2 }); }; const updateProjectConfig = async (projectName) => { const configPath = path.join(process.cwd(), `${projectName}/env.js`); const contents = fs.readFileSync(configPath, { encoding: 'utf-8', }); const replaced = contents .replace(/RNRad/gi, projectName) .replace(/com.rnrad/gi, `com.${projectName.toLowerCase()}`) .replace(/rnrad/gi, 'expo-owner'); fs.writeFileSync(configPath, replaced, { spaces: 2 }); const readmeFilePath = path.join( process.cwd(), `${projectName}/README-project.md` ); fs.renameSync( readmeFilePath, path.join(process.cwd(), `${projectName}/README.md`) ); }; const setupProject = async (projectName) => { consola.start(`Clean up and setup your project 🧹`); try { removeFiles(projectName); await initGit(projectName); updatePackageInfos(projectName); updateProjectConfig(projectName); consola.success(`Clean up and setup your project 🧹`); } catch (error) { consola.error(`Failed to clean up project folder`, error); process.exit(1); } }; module.exports = { setupProject, installDeps, };