Skip to content

Commit a310925

Browse files
committed
Inserting inquirer | Create option packageManager
1 parent 810d116 commit a310925

4 files changed

Lines changed: 308 additions & 41 deletions

File tree

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@
2020
"recife-cli": "./bin/recife-cli"
2121
},
2222
"dependencies": {
23-
"commander": "^5.1.0"
23+
"commander": "^5.1.0",
24+
"inquirer": "^7.3.0"
2425
},
2526
"devDependencies": {
27+
"@types/inquirer": "^6.5.0",
2628
"@types/node": "^14.0.11",
2729
"typescript": "^3.0.0"
2830
},

src/generators/ProjectGenerator.ts

Lines changed: 54 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,75 @@
11
import fs from 'fs';
22
import path from 'path';
33
import commander from 'commander';
4-
import copyFolder from '../utils/copyFolder';
4+
import inquirer from 'inquirer';
55

6+
import copyFolder from '../utils/copyFolder';
67
import createPackageJson from '../stages/CreatePackageJson';
78
import installDependencies from '../stages/InstallDependencies';
89
import initializeGit from '../stages/InitializeGit';
910
import Log from '../Log';
1011

11-
const createProject = (name: string) => {
12-
if (name) {
13-
Log.Instance.infoHeap(`Creating the project`);
12+
const createProject = (projectName: string, packageManager: 'yarn' | 'npm') => {
13+
Log.Instance.infoHeap(`Creating the project`);
1414

15-
const source = path.join(__dirname, '/../../templates/project');
16-
const target = path.join(process.cwd(), name);
15+
const source = path.join(__dirname, '/../../templates/project');
16+
const target = path.join(process.cwd(), projectName);
1717

18-
try {
19-
Log.Instance.infoHeap(`Copying files`);
20-
fs.mkdirSync(name);
18+
try {
19+
Log.Instance.infoHeap(`Copying files`);
20+
fs.mkdirSync(projectName);
2121

22-
copyFolder(source, target);
23-
fs.renameSync(
24-
path.join(target, 'gitignore'),
25-
path.join(target, '.gitignore')
26-
);
22+
copyFolder(source, target);
23+
fs.renameSync(
24+
path.join(target, 'gitignore'),
25+
path.join(target, '.gitignore')
26+
);
2727

28-
createPackageJson(target, name);
29-
installDependencies(target);
30-
initializeGit(name);
28+
createPackageJson(target, projectName);
29+
installDependencies(target, packageManager);
30+
initializeGit(projectName);
3131

32-
Log.Instance.successHeap(`The ${name} project was created.`);
33-
Log.Instance.info(`Path: ${target}\n\n`);
34-
} catch (err) {
35-
Log.Instance.exception(err);
36-
}
37-
} else {
38-
Log.Instance.errorHeap(`Specify the name project.`);
39-
Log.Instance.info(
40-
`For example: recife-cli project my-project-name\nRun --help for more information`
41-
);
32+
Log.Instance.successHeap(`The ${projectName} project was created.`);
33+
Log.Instance.info(`Path: ${target}\n\n`);
34+
} catch (err) {
35+
Log.Instance.exception(err);
4236
}
4337
};
4438

39+
const createProjectWithOptions = () => {
40+
inquirer
41+
.prompt([
42+
{
43+
name: 'projectName',
44+
message: 'Project Name:',
45+
type: 'string',
46+
default: 'my-project'
47+
},
48+
{
49+
name: 'packageManager',
50+
message: 'Package Manager:',
51+
type: 'list',
52+
default: 'npm',
53+
choices: ['npm', 'yarn']
54+
}
55+
])
56+
.then((answers: any) => {
57+
Log.Instance.jump();
58+
createProject(answers.projectName, answers.packageManager);
59+
});
60+
};
61+
4562
commander
4663
.name(`recife-cli project`)
47-
.arguments('<project-name>')
48-
.action(name => createProject(name))
64+
.arguments('[project-name]')
65+
.option('-p, --package-manager <packageManager>', 'Package Manager')
66+
.action((name, cmd) => {
67+
console.log(cmd);
68+
if (name) {
69+
createProject(name, cmd.packageManager || 'npm');
70+
} else {
71+
createProjectWithOptions();
72+
}
73+
})
4974
.allowUnknownOption(false)
5075
.parse(process.argv);

src/stages/InstallDependencies.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
11
import { spawnSync } from 'child_process';
22
import Log from '../Log';
33

4-
const yarnInstalled = () => {
5-
try {
6-
spawnSync('yarnpkg', ['--version'], { stdio: 'ignore' });
7-
return true;
8-
} catch (error) {
9-
return false;
10-
}
11-
};
12-
13-
const installDependencies = (target: string) => {
4+
const installDependencies = (
5+
target: string,
6+
packageManager: 'yarn' | 'npm'
7+
) => {
148
Log.Instance.infoHeap(`Installing dependencies`);
159

1610
const originalDirectory = process.cwd();
1711

1812
try {
1913
process.chdir(target);
2014

21-
if (yarnInstalled()) {
15+
if (packageManager === 'yarn') {
2216
spawnSync('yarnpkg', ['install'], { stdio: 'ignore' });
2317
} else {
2418
spawnSync('npm', ['install'], { stdio: 'ignore' });

0 commit comments

Comments
 (0)