Skip to content

Commit 6177bb5

Browse files
committed
feat(init): 完善初始化逻辑
1 parent 521b18c commit 6177bb5

File tree

2 files changed

+121
-99
lines changed

2 files changed

+121
-99
lines changed

lib/commands/init.js

Lines changed: 60 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,9 @@ exports.run = function (options) {
3131
defaultName = sysPath.basename(cwd);
3232
}
3333

34-
spinner.start();
35-
3634
// TODO 也许可以改成通过命令行让用户输入
3735
var projectName = defaultName;
3836
var initTmplPath = sysPath.resolve(__dirname, '../config/initTmpl/');
39-
var writePackageJsonStream = void 0;
4037

4138
// 如果初始化时带着初始化类型
4239
if (typeof process.argv[3] === 'string') {
@@ -67,6 +64,7 @@ exports.run = function (options) {
6764
var initParam = process.argv[3];
6865
var isInitReady = false;
6966

67+
spinner.start();
7068
async.series([
7169
// 寻找是否存在 ykit-config-xxx 的插件
7270
function (callback) {
@@ -78,7 +76,12 @@ exports.run = function (options) {
7876
checkConfigPkg(callback, '@qnpm/ykit-config-' + initParam, 'corp.qunar.com');
7977
}], function (err) {
8078
// results is now equal to ['one', 'two']
81-
isInitReady ? spinner.succeed() : spinner.fail();
79+
if (isInitReady) {
80+
spinner.stop();
81+
} else {
82+
spinner.text('can\'t find package ykit-config-' + initParam);
83+
spinner.fail();
84+
}
8285
});
8386
})();
8487
} else {
@@ -87,59 +90,67 @@ exports.run = function (options) {
8790
}
8891

8992
function initProject(configPkgName, registry) {
90-
async.series([
91-
// 创建 packge.json
92-
function (callback) {
93-
if (!UtilFs.fileExists(packageJsonPath)) {
94-
writePackageJsonStream = createPackageJson();
95-
writePackageJsonStream.on('finish', function () {
96-
log('Saved package.json file in ' + cwd);
97-
callback(null);
98-
});
99-
} else {
100-
callback(null);
101-
}
102-
},
103-
// 创建 ykit.{type}.js
104-
function (callback) {
105-
createConfigFile(configPkgName);
106-
callback(null);
107-
},
108-
// 拷贝模板
109-
function (callback) {
110-
createTmpl();
111-
callback(null);
112-
},
113-
// 安装 config 插件
114-
function (callback) {
115-
if (configPkgName && registry) {
116-
installConfigPlugin(configPkgName, registry);
117-
callback(null);
118-
} else {
119-
callback(null);
120-
}
121-
}], function (err, results) {
122-
spinner.succeed();
93+
var funcSeries = [];
94+
95+
if (configPkgName) {
96+
funcSeries = [function (callback) {
97+
return createPackageJson(callback);
98+
}, function (callback) {
99+
return installConfigPlugin(callback, configPkgName, registry);
100+
}, function (callback) {
101+
return createConfigFile(callback, configPkgName);
102+
}, function (callback) {
103+
return setup(callback);
104+
}];
105+
} else {
106+
funcSeries = [function (callback) {
107+
return createPackageJson(callback);
108+
}, function (callback) {
109+
return createConfigFile(callback, configPkgName);
110+
}, function (callback) {
111+
return createTmpl(callback);
112+
}];
113+
}
114+
115+
async.series(funcSeries, function (err, results) {});
116+
}
117+
118+
function setup(callback) {
119+
shell.exec('ykit setup', { silent: false }, function (code, stdout, stderr) {
120+
callback(stderr);
123121
});
124122
}
125123

126-
function installConfigPlugin(configPkgName, registry) {
124+
function installConfigPlugin(callback, configPkgName, registry) {
127125
if (configPkgName) {
128126
console.log('installing ' + configPkgName);
129127

130128
shell.exec('npm install ' + configPkgName + ' --registry http://registry.npm.' + registry, { silent: false }, function (code, stdout, stderr) {
131129
if (!stderr) {
132130
console.log('installing ' + configPkgName + ' succeed!!!');
133131
}
132+
callback(null);
134133
});
135134
}
136135
}
137136

138-
function createPackageJson() {
139-
return fs.createReadStream(sysPath.resolve(initTmplPath, 'package.json')).pipe(replaceStream('#_name', projectName)).pipe(fs.createWriteStream(sysPath.resolve(cwd, 'package.json')));
137+
function createPackageJson(callback) {
138+
if (!UtilFs.fileExists(packageJsonPath)) {
139+
var writePackageJsonStream = create();
140+
writePackageJsonStream.on('finish', function () {
141+
log('Saved package.json file in ' + cwd);
142+
callback(null);
143+
});
144+
} else {
145+
callback(null);
146+
}
147+
148+
function create() {
149+
return fs.createReadStream(sysPath.resolve(initTmplPath, 'package.json')).pipe(replaceStream('#_name', projectName)).pipe(fs.createWriteStream(sysPath.resolve(cwd, 'package.json')));
150+
}
140151
}
141152

142-
function createConfigFile(configPkgName) {
153+
function createConfigFile(callback, configPkgName) {
143154
var configFileName = 'ykit.js';
144155

145156
if (configPkgName) {
@@ -154,15 +165,16 @@ exports.run = function (options) {
154165
stream.on('finish', function () {
155166
log('Saved ' + configFileName + ' in ' + cwd);
156167
});
168+
169+
callback(null);
170+
} else {
171+
callback(null);
157172
}
158173
}
159174

160-
function createTmpl() {
161-
fs.copy(sysPath.resolve(initTmplPath, './src'), sysPath.resolve(cwd, './src'), function (err) {
162-
if (err) return console.error(err);
163-
});
164-
fs.copy(sysPath.resolve(initTmplPath, './index.html'), sysPath.resolve(cwd, './index.html'), function (err) {
165-
if (err) return console.error(err);
166-
});
175+
function createTmpl(callback) {
176+
fs.copySync(sysPath.resolve(initTmplPath, './index.html'), sysPath.resolve(cwd, './index.html'));
177+
fs.copySync(sysPath.resolve(initTmplPath, './src'), sysPath.resolve(cwd, './src'));
178+
callback(null);
167179
}
168180
};

src/commands/init.js

Lines changed: 61 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,16 @@ exports.run = function (options) {
3131
defaultName = sysPath.basename(cwd);
3232
}
3333

34-
spinner.start();
35-
3634
// TODO 也许可以改成通过命令行让用户输入
3735
const projectName = defaultName;
3836
const initTmplPath = sysPath.resolve(__dirname, '../config/initTmpl/');
39-
let writePackageJsonStream;
4037

4138
// 如果初始化时带着初始化类型
4239
if(typeof process.argv[3] === 'string') {
4340
const initParam = process.argv[3];
4441
let isInitReady = false;
4542

43+
spinner.start();
4644
async.series([
4745
// 寻找是否存在 ykit-config-xxx 的插件
4846
(callback) => {
@@ -55,7 +53,12 @@ exports.run = function (options) {
5553
},
5654
], (err) => {
5755
// results is now equal to ['one', 'two']
58-
isInitReady ? spinner.succeed() : spinner.fail();
56+
if(isInitReady) {
57+
spinner.stop()
58+
} else {
59+
spinner.text(`can't find package ykit-config-${initParam}`)
60+
spinner.fail()
61+
}
5962
});
6063

6164
function checkConfigPkg(callback, packageName, registry) {
@@ -88,45 +91,38 @@ exports.run = function (options) {
8891
}
8992

9093
function initProject(configPkgName, registry) {
91-
async.series([
92-
// 创建 packge.json
93-
(callback) => {
94-
if (!UtilFs.fileExists(packageJsonPath)) {
95-
writePackageJsonStream = createPackageJson();
96-
writePackageJsonStream.on('finish', () => {
97-
log('Saved package.json file in ' + cwd);
98-
callback(null);
99-
});
100-
} else {
101-
callback(null);
102-
}
103-
},
104-
// 创建 ykit.{type}.js
105-
(callback) => {
106-
createConfigFile(configPkgName);
107-
callback(null);
108-
},
109-
// 拷贝模板
110-
(callback) => {
111-
createTmpl();
112-
callback(null);
113-
},
114-
// 安装 config 插件
115-
(callback) => {
116-
if(configPkgName && registry) {
117-
installConfigPlugin(configPkgName, registry);
118-
callback(null);
119-
} else {
120-
callback(null);
121-
}
122-
},
123-
], (err, results) => {
124-
spinner.succeed();
94+
let funcSeries = []
95+
96+
if(configPkgName) {
97+
funcSeries = [
98+
(callback) => createPackageJson(callback),
99+
(callback) => installConfigPlugin(callback, configPkgName, registry),
100+
(callback) => createConfigFile(callback, configPkgName),
101+
(callback) => setup(callback)
102+
]
103+
} else {
104+
funcSeries = [
105+
(callback) => createPackageJson(callback),
106+
(callback) => createConfigFile(callback, configPkgName),
107+
(callback) => createTmpl(callback)
108+
]
109+
}
125110

111+
async.series(funcSeries, (err, results) => {
126112
});
127113
}
128114

129-
function installConfigPlugin(configPkgName, registry) {
115+
function setup(callback) {
116+
shell.exec(
117+
`ykit setup`,
118+
{silent: false},
119+
(code, stdout, stderr) => {
120+
callback(stderr)
121+
}
122+
);
123+
}
124+
125+
function installConfigPlugin(callback, configPkgName, registry) {
130126
if(configPkgName) {
131127
console.log('installing ' + configPkgName);
132128

@@ -137,18 +133,31 @@ exports.run = function (options) {
137133
if(!stderr) {
138134
console.log('installing ' + configPkgName + ' succeed!!!');
139135
}
136+
callback(null)
140137
}
141138
);
142139
}
143140
}
144141

145-
function createPackageJson() {
146-
return fs.createReadStream(sysPath.resolve(initTmplPath, 'package.json'))
147-
.pipe(replaceStream('#_name', projectName))
148-
.pipe(fs.createWriteStream(sysPath.resolve(cwd, 'package.json')));
142+
function createPackageJson(callback) {
143+
if (!UtilFs.fileExists(packageJsonPath)) {
144+
let writePackageJsonStream = create();
145+
writePackageJsonStream.on('finish', () => {
146+
log('Saved package.json file in ' + cwd);
147+
callback(null);
148+
});
149+
} else {
150+
callback(null);
151+
}
152+
153+
function create() {
154+
return fs.createReadStream(sysPath.resolve(initTmplPath, 'package.json'))
155+
.pipe(replaceStream('#_name', projectName))
156+
.pipe(fs.createWriteStream(sysPath.resolve(cwd, 'package.json')));
157+
}
149158
}
150159

151-
function createConfigFile(configPkgName) {
160+
function createConfigFile(callback, configPkgName) {
152161
let configFileName = 'ykit.js';
153162

154163
if(configPkgName) {
@@ -165,15 +174,16 @@ exports.run = function (options) {
165174
stream.on('finish', () => {
166175
log('Saved ' + configFileName + ' in ' + cwd);
167176
});
177+
178+
callback(null)
179+
} else {
180+
callback(null)
168181
}
169182
}
170183

171-
function createTmpl() {
172-
fs.copy(sysPath.resolve(initTmplPath, './src'), sysPath.resolve(cwd, './src'), function (err) {
173-
if (err) return console.error(err);
174-
});
175-
fs.copy(sysPath.resolve(initTmplPath, './index.html'), sysPath.resolve(cwd, './index.html'), function (err) {
176-
if (err) return console.error(err);
177-
});
184+
function createTmpl(callback) {
185+
fs.copySync(sysPath.resolve(initTmplPath, './index.html'), sysPath.resolve(cwd, './index.html'));
186+
fs.copySync(sysPath.resolve(initTmplPath, './src'), sysPath.resolve(cwd, './src'));
187+
callback(null);
178188
}
179189
};

0 commit comments

Comments
 (0)