-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.js
81 lines (75 loc) · 2.43 KB
/
options.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
const chalk = require('chalk');
const readPkg = require('read-pkg');
const jsonfile = require('jsonfile');
const path = require('path');
const { log } = console;
const dependencyList = require('./sections/dependencyList');
const webpackList = require('./sections/webpackList');
const linterList = require('./sections/linterList');
const fileTreeList = require('./sections/fileTreeList');
const test = 'jest --verbose --passWithNoTests';
const development = 'webpack-dev-server --env.NODE_ENV=development --config webpack.dev.js --open';
const production = 'webpack --env.NODE_ENV=production --config webpack.prod.js';
const errorMsgs = [
`package.json can't have other dependencies`,
// `No package.json in current working directory. please npm init first.`,
// `Syntax error in package.json`,
];
const completed = `
Completed installation
Run ${chalk.bold.cyan('npm run dev')} to start development!
`;
module.exports = {
end: (ctx) => {
if(!ctx.test) return log(`\nIncomplete\n`);
log(completed);
},
tasks: [
{
title: 'checking for a valid package.json',
task: ctx => {
try {
ctx.test = true;
ctx.file = readPkg.sync();
const hasDependencies = !!(ctx.file.dependencies || ctx.file.devDependencies);
if (hasDependencies) throw new Error(errorMsgs[0]);
} catch(err) {
// const token = err.message.substring(0, 16);
// const syntax = token === 'Unexpected token' ? errorMsgs[2] : errorMsgs[1];
// const error = err.message === errorMsgs[0] ? errorMsgs[0] : syntax;
throw new Error(err.message);
}
},
},
{
title: 'modifying package scripts',
enabled: ctx => ctx.test,
task: ctx => {
ctx.file.scripts.test = test;
ctx.file.scripts.dev = development;
ctx.file.scripts.build = production;
jsonfile.writeFileSync(path.join(process.cwd(), 'package.json'), ctx.file, { spaces: 2 });
}
},
{
title: 'installing dev and local dependencies',
enabled: ctx => ctx.test,
task: () => dependencyList,
},
{
title: 'constructing webpacks',
enabled: ctx => ctx.test,
task: () => webpackList,
},
{
title: 'constructing linting',
enabled: ctx => ctx.test,
task: () => linterList,
},
{
title: 'constructing file structure',
enabled: ctx => ctx.test,
task: () => fileTreeList,
}
],
};