Skip to content

Commit 7dc1913

Browse files
SukkaWuiolee
andauthored
refactor: reduce the installation size (#7)
Co-authored-by: uiolee <[email protected]>
1 parent e5d779c commit 7dc1913

File tree

4 files changed

+45
-74
lines changed

4 files changed

+45
-74
lines changed

package.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,13 @@
4646
"tsbw": "tsc -b -v -w"
4747
},
4848
"dependencies": {
49-
"chalk": "^5.3.0",
5049
"commander": "^12.0.0",
5150
"execa": "^8.0.1",
52-
"fs-extra": "^11.2.0"
51+
"picocolors": "^1.0.0"
5352
},
5453
"devDependencies": {
5554
"@jest/globals": "^29.7.0",
5655
"@jest/types": "^29.6.3",
57-
"@types/fs-extra": "^11.0.4",
5856
"@types/node": "^20.11.17",
5957
"@typescript-eslint/eslint-plugin": "^6.21.0",
6058
"@typescript-eslint/parser": "^6.21.0",

pnpm-lock.yaml

Lines changed: 4 additions & 50 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/log.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { Console, ConsoleConstructorOptions } from "node:console";
2-
import { default as chalk } from "chalk";
2+
import { default as picocolors } from "picocolors";
3+
const { bold, bgWhite, gray, bgCyan, bgYellow, bgRed, bgBlue, underline } =
4+
picocolors;
35

46
class Logger extends Console {
57
constructor(
@@ -11,23 +13,23 @@ class Logger extends Console {
1113
super(consoleOptions);
1214
}
1315
debug(...args: any[]) {
14-
super.debug(chalk.bgWhite.bold("DEBUG"), ...args);
16+
super.debug(bgWhite(bold("DEBUG")), ...args);
1517
}
1618
log(...args: any[]) {
17-
super.log(chalk.gray.bold("LOG "), ...args);
19+
super.log(gray(bold("LOG ")), ...args);
1820
}
1921
info(...args: any[]) {
20-
super.info(chalk.bgCyan.bold("INFO "), ...args);
22+
super.info(bgCyan(bold("INFO ")), ...args);
2123
}
2224
warn(...args: any[]) {
23-
super.warn(chalk.bgYellow.bold("WARN "), ...args);
25+
super.warn(bgYellow(bold("WARN ")), ...args);
2426
}
2527
error(...args: any[]) {
26-
super.error(chalk.bgRed.bold("ERROR"), ...args);
28+
super.error(bgRed(bold("ERROR")), ...args);
2729
}
2830
group(...args: any[]): void {
2931
super.log();
30-
super.group(chalk.bgBlue.bold.underline(...args));
32+
super.group(...args.map((arg) => bgBlue(bold(underline(arg)))));
3133
}
3234
t = super.trace;
3335
d = super.debug;

src/main.ts

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { fileURLToPath } from "node:url";
33

44
import { Command, Option } from "commander";
55
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";
88
import { Logger } from "./log.js";
99

1010
const __filename = fileURLToPath(import.meta.url);
@@ -47,12 +47,16 @@ const main = async () => {
4747

4848
logger.group(`Copying \`${STARTER}\``);
4949
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+
})
5154
.then(() => {
5255
logger.log(`Copied \`${STARTER}\` to "${initOptions.blogPath}"`);
5356
})
5457
.catch((err) => {
5558
logger.error("Copy failed: ", err);
59+
process.exit(1);
5660
})
5761
.finally(() => {
5862
logger.groupEnd();
@@ -189,34 +193,39 @@ const checkPackageManager = (): Promise<PM> => {
189193
};
190194

191195
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) => {
195201
logger.log(pm, data);
196202
});
197-
cp.stderr?.setEncoding("utf8");
198-
cp.stderr?.on("data", function (data) {
203+
child.stderr?.setEncoding("utf8");
204+
child.stderr?.on("data", function (data) {
199205
logger.warn(pm, data);
200206
});
201-
cp.on("error", (err) => {
207+
child.on("error", (err) => {
202208
logger.error("Install error: ", err);
203209
});
204-
cp.on("close", (code) => {
210+
child.on("close", (code) => {
205211
if (code !== 0) {
206212
logger.error("Install error: ", code);
207213
} else {
208214
logger.info("Install package finshed");
209215
}
210216
});
211-
return cp;
217+
return child;
212218
};
213219

214220
const post = () => {
215221
const ls: any[] = [];
216222

217223
RM_FILES.forEach((item) => {
218224
ls.push(
219-
remove(pathResolve(initOptions.blogPath, item))
225+
rm(pathResolve(initOptions.blogPath, item), {
226+
force: true,
227+
recursive: true,
228+
})
220229
.then(() => {
221230
logger.log(`remove "${item}" success!`);
222231
})
@@ -227,8 +236,16 @@ const post = () => {
227236
});
228237

229238
ADD_FILES.forEach((item) => {
239+
const file = pathResolve(initOptions.blogPath, item);
240+
const dir = dirname(file);
241+
230242
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+
})
232249
.then(() => {
233250
logger.log(`add "${item}" success!`);
234251
})
@@ -241,7 +258,7 @@ const post = () => {
241258
return Promise.all(ls);
242259
};
243260
const end = async () => {
244-
logger.group("Finshed!", "\n");
261+
logger.group("Finshed!");
245262
logger.info("Enjoy yourself!", "\n");
246263
logger.groupEnd();
247264
logger.timeEnd("create-hexo");

0 commit comments

Comments
 (0)