UNPKG

create-strapi-app

Version:

Generate a new Strapi application.

1 lines 15 kB
{"version":3,"file":"create-strapi.mjs","sources":["../src/create-strapi.ts"],"sourcesContent":["import { join } from 'node:path';\n\nimport chalk from 'chalk';\nimport execa from 'execa';\nimport fse from 'fs-extra';\n\nimport { copyTemplate } from './utils/template';\nimport { tryGitInit } from './utils/git';\nimport { trackUsage } from './utils/usage';\nimport { createPackageJSON } from './utils/package-json';\nimport { generateDotEnv } from './utils/dot-env';\nimport { isStderrError } from './types';\n\nimport type { Scope } from './types';\nimport { logger } from './utils/logger';\nimport { gitIgnore } from './utils/gitignore';\nimport { getInstallArgs } from './utils/get-package-manager-args';\n\nasync function createStrapi(scope: Scope) {\n const { rootPath } = scope;\n try {\n await fse.ensureDir(rootPath);\n await createApp(scope);\n } catch (error) {\n await fse.remove(rootPath);\n\n throw error;\n }\n}\n\nasync function createApp(scope: Scope) {\n const {\n rootPath,\n useTypescript,\n useExample,\n installDependencies,\n isQuickstart,\n template,\n packageManager,\n gitInit,\n runApp,\n } = scope;\n\n const shouldRunSeed = useExample && installDependencies;\n\n await trackUsage({ event: 'willCreateProject', scope });\n\n logger.title('Strapi', `Creating a new application at ${chalk.green(rootPath)}`);\n\n if (!isQuickstart) {\n await trackUsage({ event: 'didChooseCustomDatabase', scope });\n } else {\n await trackUsage({ event: 'didChooseQuickstart', scope });\n }\n\n if (!template) {\n let templateName = useExample ? 'example' : 'vanilla';\n\n if (!useTypescript) {\n templateName = `${templateName}-js`;\n }\n\n const internalTemplatePath = join(__dirname, '../templates', templateName);\n if (await fse.exists(internalTemplatePath)) {\n await fse.copy(internalTemplatePath, rootPath);\n }\n } else {\n try {\n logger.info(`${chalk.cyan('Installing template')} ${template}`);\n\n await copyTemplate(scope, rootPath);\n\n logger.success('Template copied successfully.');\n } catch (error) {\n if (error instanceof Error) {\n logger.fatal(`Template installation failed: ${error.message}`);\n }\n\n throw error;\n }\n\n if (!fse.existsSync(join(rootPath, 'package.json'))) {\n logger.fatal(`Missing ${chalk.bold('package.json')} in template`);\n }\n }\n\n await trackUsage({ event: 'didCopyProjectFiles', scope });\n\n try {\n await createPackageJSON(scope);\n\n await trackUsage({ event: 'didWritePackageJSON', scope });\n\n // ensure node_modules is created\n await fse.ensureDir(join(rootPath, 'node_modules'));\n\n // create config/database\n await fse.writeFile(join(rootPath, '.env'), generateDotEnv(scope));\n\n await trackUsage({ event: 'didCopyConfigurationFiles', scope });\n } catch (err) {\n await fse.remove(rootPath);\n throw err;\n }\n\n if (installDependencies) {\n try {\n logger.title('deps', `Installing dependencies with ${chalk.cyan(packageManager)}`);\n\n await trackUsage({ event: 'willInstallProjectDependencies', scope });\n\n await runInstall(scope);\n\n await trackUsage({ event: 'didInstallProjectDependencies', scope });\n\n logger.success(`Dependencies installed`);\n } catch (error) {\n const stderr = isStderrError(error) ? error.stderr : '';\n\n await trackUsage({\n event: 'didNotInstallProjectDependencies',\n scope,\n error: stderr.slice(-1024),\n });\n\n logger.fatal([\n chalk.bold(\n 'Oh, it seems that you encountered an error while installing dependencies in your project'\n ),\n '',\n `Don't give up, your project was created correctly`,\n '',\n `Fix the issues mentioned in the installation errors and try to run the following command:`,\n '',\n `cd ${chalk.green(rootPath)} && ${chalk.cyan(packageManager)} install`,\n ]);\n }\n }\n\n await trackUsage({ event: 'didCreateProject', scope });\n\n // make sure a gitignore file is created regardless of the user using git or not\n if (!(await fse.exists(join(rootPath, '.gitignore')))) {\n await fse.writeFile(join(rootPath, '.gitignore'), gitIgnore);\n }\n\n // Init git\n if (gitInit) {\n logger.title('git', 'Initializing git repository.');\n\n await tryGitInit(rootPath);\n\n logger.success('Initialized a git repository.');\n }\n\n if (shouldRunSeed) {\n if (await fse.exists(join(rootPath, 'scripts/seed.js'))) {\n logger.title('Seed', 'Seeding your database with sample data');\n\n try {\n await execa(packageManager, ['run', 'seed:example'], {\n stdio: 'inherit',\n cwd: rootPath,\n });\n logger.success('Sample data added to your database');\n } catch (error) {\n logger.error('Failed to seed your database. Skipping');\n }\n }\n }\n\n const cmd = chalk.cyan(`${packageManager} run`);\n\n logger.title('Strapi', `Your application was created!`);\n\n logger.log([\n 'Available commands in your project:',\n '',\n 'Start Strapi in watch mode. (Changes in Strapi project files will trigger a server restart)',\n `${cmd} develop`,\n '',\n 'Start Strapi without watch mode.',\n `${cmd} start`,\n '',\n 'Build Strapi admin panel.',\n `${cmd} build`,\n '',\n 'Deploy Strapi project.',\n `${cmd} deploy`,\n '',\n ]);\n\n if (useExample) {\n logger.log(['Seed your database with sample data.', `${cmd} seed:example`, '']);\n }\n\n logger.log(['Display all available commands.', `${cmd} strapi\\n`]);\n\n if (installDependencies) {\n logger.log([\n 'To get started run',\n '',\n `${chalk.cyan('cd')} ${rootPath}`,\n !shouldRunSeed && useExample ? `${cmd} seed:example && ${cmd} develop` : `${cmd} develop`,\n ]);\n } else {\n logger.log([\n 'To get started run',\n '',\n `${chalk.cyan('cd')} ${rootPath}`,\n `${chalk.cyan(packageManager)} install`,\n !shouldRunSeed && useExample ? `${cmd} seed:example && ${cmd} develop` : `${cmd} develop`,\n ]);\n }\n\n if (runApp && installDependencies) {\n logger.title('Run', 'Running your Strapi application');\n\n try {\n await trackUsage({ event: 'willStartServer', scope });\n\n await execa(packageManager, ['run', 'develop'], {\n stdio: 'inherit',\n cwd: rootPath,\n env: {\n FORCE_COLOR: '1',\n },\n });\n } catch (error) {\n if (typeof error === 'string' || error instanceof Error) {\n await trackUsage({\n event: 'didNotStartServer',\n scope,\n error,\n });\n }\n\n logger.fatal('Failed to start your Strapi application');\n }\n }\n}\n\nasync function runInstall({ rootPath, packageManager }: Scope) {\n // include same cwd and env to ensure version check returns same version we use below\n const { envArgs, cmdArgs } = await getInstallArgs(packageManager, {\n cwd: rootPath,\n env: {\n ...process.env,\n NODE_ENV: 'development',\n },\n });\n\n const options: execa.Options = {\n cwd: rootPath,\n stdio: 'inherit',\n env: {\n ...process.env,\n ...envArgs,\n NODE_ENV: 'development',\n },\n };\n\n const proc = execa(packageManager, cmdArgs, options);\n\n return proc;\n}\n\nexport { createStrapi };\n"],"names":["createStrapi","scope","rootPath","fse","ensureDir","createApp","error","remove","useTypescript","useExample","installDependencies","isQuickstart","template","packageManager","gitInit","runApp","shouldRunSeed","trackUsage","event","logger","title","chalk","green","templateName","internalTemplatePath","join","__dirname","exists","copy","info","cyan","copyTemplate","success","Error","fatal","message","existsSync","bold","createPackageJSON","writeFile","generateDotEnv","err","runInstall","stderr","isStderrError","slice","gitIgnore","tryGitInit","execa","stdio","cwd","cmd","log","env","FORCE_COLOR","envArgs","cmdArgs","getInstallArgs","process","NODE_ENV","options","proc"],"mappings":"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"}