1
1
'use strict' ;
2
2
3
+ /* eslint-disable */
4
+
5
+ var shell = require ( 'shelljs' ) ;
6
+ var async = require ( 'async' ) ;
7
+
3
8
var replaceStream = require ( 'replacestream' ) ;
4
9
5
10
var Manager = require ( '../modules/manager.js' ) ;
@@ -26,24 +31,101 @@ exports.run = function (options) {
26
31
defaultName = sysPath . basename ( cwd ) ;
27
32
}
28
33
34
+ spinner . start ( ) ;
35
+
29
36
// TODO 也许可以改成通过命令行让用户输入
30
37
var projectName = defaultName ;
31
-
32
38
var initTmplPath = sysPath . resolve ( __dirname , '../config/initTmpl/' ) ;
33
39
var writePackageJsonStream = void 0 ;
34
40
35
- // 如果没有package.json,先添加package.json
36
- if ( ! UtilFs . fileExists ( packageJsonPath ) ) {
37
- writePackageJsonStream = createPackageJson ( ) ;
38
- }
39
-
40
- if ( ! writePackageJsonStream ) {
41
- createConfigFile ( ) ;
41
+ // 如果初始化时带着初始化类型
42
+ if ( typeof process . argv [ 3 ] === 'string' ) {
43
+ ( function ( ) {
44
+ var checkInitCmd = function checkInitCmd ( callback ) {
45
+ shell . exec ( 'node ~/Desktop/pro/ykit/bin/ykit ' + initParam + ' init' , { silent : true } , function ( code , stdout , stderr ) {
46
+ if ( stdout . indexOf ( 'X' ) > - 1 ) {
47
+ // do nothing
48
+ } else {
49
+ isInitReady = true ;
50
+ }
51
+ callback ( null , 'one' ) ;
52
+ } ) ;
53
+ } ;
54
+
55
+ var checkConfigPkg = function checkConfigPkg ( callback , packageName , registry ) {
56
+ if ( ! isInitReady ) {
57
+ ( function ( ) {
58
+ var timeout = void 0 ;
59
+ var child = shell . exec ( 'npm view ' + packageName + ' --registry https://registry.npm.' + registry + '.org' , { silent : true } , function ( code , stdout , stderr ) {
60
+ if ( stdout ) {
61
+ isInitReady = true ;
62
+ initProject ( ) ;
63
+ }
64
+ clearTimeout ( timeout ) ;
65
+ callback ( null ) ;
66
+ } ) ;
67
+
68
+ // 防止超时
69
+ timeout = setTimeout ( function ( ) {
70
+ child . kill ( 'SIGINT' ) ;
71
+ } , 5000 ) ;
72
+ } ) ( ) ;
73
+ } else {
74
+ callback ( null , 'two' ) ;
75
+ }
76
+ } ;
77
+
78
+ var initParam = process . argv [ 3 ] ;
79
+ var isInitReady = false ;
80
+
81
+ async . series ( [
82
+ // 首先寻找是否存在 ykit xxx init 命令
83
+ function ( callback ) {
84
+ spinner . text = 'checking cmd ykit ' + initParam + ' init' ;
85
+ checkInitCmd ( callback ) ;
86
+ }
87
+ // TODO
88
+ // 寻找是否存在 ykit-config-xxx 的插件
89
+ // (callback) => {
90
+ // spinner.text =`checking package ykit-config-${initParam}`;
91
+ // checkConfigPkg(callback, `ykit-config-${initParam}`, 'taobao')
92
+ // },
93
+ // // 寻找是否存在 @qnpm/ykit-config-xxx 的插件
94
+ // (callback) => {
95
+ // checkConfigPkg(callback, `@qnpm/ykit-config-${initParam}`, 'corp.qunar')
96
+ // },
97
+ ] , function ( err ) {
98
+ // results is now equal to ['one', 'two']
99
+ isInitReady ? spinner . succeed ( ) : spinner . fail ( ) ;
100
+ } ) ;
101
+ } ) ( ) ;
42
102
} else {
43
- writePackageJsonStream . on ( 'finish' , function ( ) {
44
- log ( 'Successfully created package.json file in ' + cwd ) ;
103
+ // 如果没有package.json,先添加package.json
104
+ initProject ( ) ;
105
+ }
45
106
107
+ function initProject ( ) {
108
+ async . series ( [
109
+ // 首先寻找是否存在 ykit xxx init 命令
110
+ function ( callback ) {
111
+ if ( ! UtilFs . fileExists ( packageJsonPath ) ) {
112
+ writePackageJsonStream = createPackageJson ( ) ;
113
+ writePackageJsonStream . on ( 'finish' , function ( ) {
114
+ log ( 'Saved package.json file in ' + cwd ) ;
115
+ callback ( null ) ;
116
+ } ) ;
117
+ } else {
118
+ callback ( null ) ;
119
+ }
120
+ } , function ( callback ) {
46
121
createConfigFile ( ) ;
122
+ callback ( null ) ;
123
+ } , function ( callback ) {
124
+ createTmpl ( ) ;
125
+ callback ( null ) ;
126
+ } ] , function ( err , results ) {
127
+ // results is now equal to ['one', 'two']
128
+ spinner . succeed ( ) ;
47
129
} ) ;
48
130
}
49
131
@@ -60,8 +142,17 @@ exports.run = function (options) {
60
142
var stream = fs . createReadStream ( configFilePath ) . pipe ( replaceStream ( '#_name' , projectName ) ) . pipe ( writeStream ) ;
61
143
62
144
stream . on ( 'finish' , function ( ) {
63
- log ( 'Successfully created ' + configFileName + ' in ' + cwd ) ;
145
+ log ( 'Saved ' + configFileName + ' in ' + cwd ) ;
64
146
} ) ;
65
147
}
66
148
}
149
+
150
+ function createTmpl ( ) {
151
+ fs . move ( sysPath . resolve ( initTmplPath , './src' ) , sysPath . resolve ( cwd , './src' ) , function ( err ) {
152
+ if ( err ) return console . error ( err ) ;
153
+ } ) ;
154
+ fs . move ( sysPath . resolve ( initTmplPath , './index.html' ) , sysPath . resolve ( cwd , './index.html' ) , function ( err ) {
155
+ if ( err ) return console . error ( err ) ;
156
+ } ) ;
157
+ }
67
158
} ;
0 commit comments