UNPKG

@artegha/create-node-server

Version:

Create Node servers with no build configuration.

127 lines (120 loc) 3.35 kB
import chalk from 'chalk' import { execSync } from 'child_process' import fs from 'fs-extra' import os from 'os' import path from 'path' // import semver from 'semver' import prompts from 'prompts' import tools from '../utils/tools' export default async (server: Server) => { // if (!semver.satisfies(process.version, '>=10')) { // console.log( // chalk.yellow( // `You are using Node ${process.version} so the project will be bootstrapped with an old unsupported version of tools.\n\n` + // 'Please update to Node 10 or higher for a better, fully supported experience.\n' // ) // ) // } if (!server.name) { console.error('Please specify the project directory:') console.log(` ${chalk.cyan(server.programName)} ${chalk.green('<project-directory>')}`) console.log() console.log('For example:') console.log(` ${chalk.cyan(server.programName)} ${chalk.green('my-node-server')}`) console.log() console.log(`Run ${chalk.cyan(`${server.programName} --help`)} to see all options.`) const response = await prompts( [ { type: 'text', name: 'name', message: 'Specify a name for your project', }, ], { onCancel: () => { throw new Error('You cancel prompt commands') }, } ) server.name = response.name } server.root = path.resolve(server.name) // let appNameIsValid = false // while (!appNameIsValid) { // response = await prompts( // [ // { // type: 'text', // name: 'name', // message: 'Specify a name for your project', // }, // ], // { // onCancel: () => { // console.log('You cancel prompt commands') // process.exit(1) // }, // } // ) // name = response.name // appNameIsValid = tools.checkAppName(name) // } console.log() console.log(`Creating a new Node Project in ${chalk.green(server.root)}.`) console.log() if (!fs.existsSync(server.name)) { fs.mkdirSync(server.name) } else { console.log(`The directory ${chalk.green(server.name)} already exist :`) const response = await prompts( [ { type: 'toggle', name: 'remove', message: 'Do you want to remove it ?', initial: true, active: 'no', inactive: 'yes', }, ], { onCancel: () => { throw new Error('You cancel prompt commands') }, } ) console.log() if (!response.remove) { fs.removeSync(path.join(server.name)) fs.mkdirSync(server.name) } else { console.log('Please moove the directory or choose another name for your project') process.exit(0) } } const packageJson = { name: server.name, version: '0.0.1', private: true, } fs.writeFileSync(path.join(server.root, 'package.json'), JSON.stringify(packageJson, null, 2) + os.EOL) server.originalRoot = process.cwd() // store the original root process.chdir(server.root) // change the process root if (!server.useYarn && !tools.checkThatNpmCanReadCwd()) { throw new Error('NPM can\'t read cwd') } if (server.useYarn) { let yarnUsesDefaultRegistry = true try { yarnUsesDefaultRegistry = execSync('yarnpkg config get registry').toString().trim() === 'https://registry.yarnpkg.com' } catch (e) { throw new Error(e) } if (yarnUsesDefaultRegistry) { fs.copySync(require.resolve('./yarn.lock.cached'), path.join(server.root, 'yarn.lock')) } } return server }