1 | 'use strict';
|
2 |
|
3 | const inquirer = require('inquirer');
|
4 | const fs = require('fs');
|
5 | const path = require('path');
|
6 | const spawn = require('child_process').spawn;
|
7 |
|
8 | const databases = ['SQLite', 'MySQL', 'PostgreSQL', 'MariaDB', 'MSSQL'];
|
9 |
|
10 | function run(cmd, args, fn) {
|
11 | args = args || [];
|
12 | var runner = spawn(cmd, args, {
|
13 | stdio: "inherit"
|
14 | });
|
15 | runner.on('close', function(code) {
|
16 | if (fn) {
|
17 | fn(code);
|
18 | }
|
19 | });
|
20 | }
|
21 |
|
22 | module.exports = function() {
|
23 | let questions = [{
|
24 | type: 'input',
|
25 | name: 'domain',
|
26 | message: 'Domain:',
|
27 | default: 'http://passport.example.com'
|
28 | }, {
|
29 | type: 'input',
|
30 | name: 'logo',
|
31 | message: 'Logo:',
|
32 | default: 'http://example.com/icon.png'
|
33 | }, {
|
34 | type: 'list',
|
35 | name: 'database',
|
36 | message: 'Database:',
|
37 | choices: databases
|
38 | }, {
|
39 | type: 'list',
|
40 | name: 'session',
|
41 | message: 'Session Store:',
|
42 | choices: ['Memory', 'Redis']
|
43 | }];
|
44 |
|
45 | inquirer
|
46 | .prompt(questions)
|
47 | .then(function(options) {
|
48 | let pkg = {
|
49 | name: path.basename(process.cwd()),
|
50 | version: '1.0.0',
|
51 | dependencies: {}
|
52 | };
|
53 |
|
54 | if (options.session === 'Redis') {
|
55 | pkg.dependencies['koa-redis'] = 'latest';
|
56 | }
|
57 |
|
58 | switch (options.database) {
|
59 | case 'SQLite':
|
60 | pkg.dependencies['sqlite3'] = 'latest';
|
61 | break;
|
62 | case 'MySQL':
|
63 | pkg.dependencies['mysql'] = 'latest';
|
64 | break;
|
65 | case 'PostgreSQL':
|
66 | pkg.dependencies['pg'] = 'latest';
|
67 | pkg.dependencies['pg-hstore'] = 'latest';
|
68 | break;
|
69 | case 'MariaDB':
|
70 | pkg.dependencies['mysql'] = 'latest';
|
71 | break;
|
72 | case 'MSSQL':
|
73 | pkg.dependencies['tedious'] = 'latest';
|
74 | break;
|
75 | }
|
76 |
|
77 | fs.writeFileSync('package.json', JSON.stringify(pkg, null, ' '), 'utf8');
|
78 |
|
79 | console.log('Generate package.json done.');
|
80 |
|
81 | let tpl = fs.readFileSync(path.join(__dirname, '_config.js'), 'utf8');
|
82 |
|
83 | tpl = tpl
|
84 | .replace(/__domain__/, options.domain)
|
85 | .replace(/__logo__/, options.logo);
|
86 |
|
87 | databases.push('Redis');
|
88 |
|
89 | for (let db of databases) {
|
90 | let r = new RegExp('/\\*' + db + '\\*/([\\s\\S]*?)/\\*' + db + '\\*/', 'gm');
|
91 | if (options.database === db || options.session === db) {
|
92 | tpl = tpl.replace(r, '$1\n');
|
93 | } else {
|
94 | tpl = tpl.replace(r, '');
|
95 | }
|
96 | }
|
97 |
|
98 | tpl = tpl.replace(/^\s*[\r\n]/gm, '');
|
99 |
|
100 | fs.writeFileSync('config.js', tpl, 'utf8');
|
101 |
|
102 | console.log('Generate config.js done.');
|
103 |
|
104 | run('npm', ['install'], function() {
|
105 | console.log('npm install done.');
|
106 | });
|
107 | });
|
108 | };
|