@@ -3,8 +3,8 @@ import { fileURLToPath } from "node:url";
3
3
4
4
import { Command , Option } from "commander" ;
5
5
import { execa } from "execa" ;
6
- import { copy , ensureFile , remove } from "fs-extra " ;
7
- import { readdir , readFile } from "fs/promises" ;
6
+ import { existsSync } from "node:fs " ;
7
+ import { readdir , readFile , cp , rm , mkdir , writeFile } from "node: fs/promises" ;
8
8
import { Logger } from "./log.js" ;
9
9
10
10
const __filename = fileURLToPath ( import . meta. url ) ;
@@ -47,12 +47,16 @@ const main = async () => {
47
47
48
48
logger . group ( `Copying \`${ STARTER } \`` ) ;
49
49
const [ voidd , pm ] = await Promise . all ( [
50
- copy ( STARTER_DIR , initOptions . blogPath )
50
+ cp ( STARTER_DIR , initOptions . blogPath , {
51
+ force : initOptions . force ,
52
+ recursive : true ,
53
+ } )
51
54
. then ( ( ) => {
52
55
logger . log ( `Copied \`${ STARTER } \` to "${ initOptions . blogPath } "` ) ;
53
56
} )
54
57
. catch ( ( err ) => {
55
58
logger . error ( "Copy failed: " , err ) ;
59
+ process . exit ( 1 ) ;
56
60
} )
57
61
. finally ( ( ) => {
58
62
logger . groupEnd ( ) ;
@@ -189,34 +193,39 @@ const checkPackageManager = (): Promise<PM> => {
189
193
} ;
190
194
191
195
const installPackage = ( pm : string ) => {
192
- const cp = execa ( pm , [ "install" ] , { cwd : initOptions . blogPath } ) ;
193
- cp . stdout ?. setEncoding ( "utf8" ) ;
194
- cp . stdout ?. on ( "data" , ( data ) => {
196
+ const child = execa ( pm , [ "install" ] , {
197
+ cwd : initOptions . blogPath ,
198
+ } ) ;
199
+ child . stdout ?. setEncoding ( "utf8" ) ;
200
+ child . stdout ?. on ( "data" , ( data ) => {
195
201
logger . log ( pm , data ) ;
196
202
} ) ;
197
- cp . stderr ?. setEncoding ( "utf8" ) ;
198
- cp . stderr ?. on ( "data" , function ( data ) {
203
+ child . stderr ?. setEncoding ( "utf8" ) ;
204
+ child . stderr ?. on ( "data" , function ( data ) {
199
205
logger . warn ( pm , data ) ;
200
206
} ) ;
201
- cp . on ( "error" , ( err ) => {
207
+ child . on ( "error" , ( err ) => {
202
208
logger . error ( "Install error: " , err ) ;
203
209
} ) ;
204
- cp . on ( "close" , ( code ) => {
210
+ child . on ( "close" , ( code ) => {
205
211
if ( code !== 0 ) {
206
212
logger . error ( "Install error: " , code ) ;
207
213
} else {
208
214
logger . info ( "Install package finshed" ) ;
209
215
}
210
216
} ) ;
211
- return cp ;
217
+ return child ;
212
218
} ;
213
219
214
220
const post = ( ) => {
215
221
const ls : any [ ] = [ ] ;
216
222
217
223
RM_FILES . forEach ( ( item ) => {
218
224
ls . push (
219
- remove ( pathResolve ( initOptions . blogPath , item ) )
225
+ rm ( pathResolve ( initOptions . blogPath , item ) , {
226
+ force : true ,
227
+ recursive : true ,
228
+ } )
220
229
. then ( ( ) => {
221
230
logger . log ( `remove "${ item } " success!` ) ;
222
231
} )
@@ -227,8 +236,16 @@ const post = () => {
227
236
} ) ;
228
237
229
238
ADD_FILES . forEach ( ( item ) => {
239
+ const file = pathResolve ( initOptions . blogPath , item ) ;
240
+ const dir = dirname ( file ) ;
241
+
230
242
ls . push (
231
- ensureFile ( pathResolve ( initOptions . blogPath , item ) )
243
+ mkdir ( dir , { recursive : true } )
244
+ . then ( ( ) => {
245
+ if ( ! existsSync ( file ) ) {
246
+ return writeFile ( file , "" ) ;
247
+ }
248
+ } )
232
249
. then ( ( ) => {
233
250
logger . log ( `add "${ item } " success!` ) ;
234
251
} )
@@ -241,7 +258,7 @@ const post = () => {
241
258
return Promise . all ( ls ) ;
242
259
} ;
243
260
const end = async ( ) => {
244
- logger . group ( "Finshed!" , "\n" ) ;
261
+ logger . group ( "Finshed!" ) ;
245
262
logger . info ( "Enjoy yourself!" , "\n" ) ;
246
263
logger . groupEnd ( ) ;
247
264
logger . timeEnd ( "create-hexo" ) ;
0 commit comments