create-rnrad-app
Version:
91 lines (81 loc) • 2.65 kB
JavaScript
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,
};