Skip to content

Commit d20ebef

Browse files
committed
✨ refactor(app): 调整自定义配置文件的加载时机
1 parent 364e72a commit d20ebef

File tree

9 files changed

+78
-66
lines changed

9 files changed

+78
-66
lines changed

src/cli.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import cac from "cac";
22

33
import { cmdInstaller, handleError } from "@/helper";
4-
import { config } from "@/index";
4+
import { plugins } from "@/index";
55

66
import pkg from "../package.json";
77

88
const setupCli = async () => {
99
const cli = cac("codeg");
1010

11-
cmdInstaller(cli, config);
11+
await cmdInstaller(cli, plugins);
1212

1313
cli.help();
1414
cli.version(pkg.version);

src/command/clear.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,10 @@ import enquirer from "enquirer";
66
import fs from "fs-extra";
77

88
import { ACTIVATION, clearGlob } from "@/config";
9-
import { execCommand, loadConfigModule, loggerInfo, printInfo } from "@/helper";
10-
import { ClearOptions } from "@/types";
9+
import { execCommand, loggerInfo, printInfo } from "@/helper";
10+
import { ClearOptions, CodeGeniusOptions } from "@/types";
1111

12-
const mergeConfig = async () => {
13-
const config = await loadConfigModule();
12+
const mergeConfig = async (config: CodeGeniusOptions) => {
1413
const commands = config && config?.commands;
1514
if (commands && commands.clear) {
1615
const { files } = commands.clear;
@@ -23,7 +22,9 @@ const mergeConfig = async () => {
2322
};
2423
};
2524

26-
const generateEnquirer = async (): Promise<ClearOptions> => {
25+
const generateEnquirer = async (
26+
config: CodeGeniusOptions,
27+
): Promise<ClearOptions> => {
2728
const files = fs
2829
.readdirSync(path.join(process.cwd(), "."))
2930
.filter((v) => !v.startsWith("."))
@@ -35,7 +36,7 @@ const generateEnquirer = async (): Promise<ClearOptions> => {
3536
});
3637
files.sort((v1, v2) => v1.sort - v2.sort);
3738

38-
const { paths } = await mergeConfig();
39+
const { paths } = await mergeConfig(config);
3940
const fileMultiChoices = files.map((v) => {
4041
return {
4142
name: `./${v.file}`,
@@ -66,7 +67,7 @@ export const clear = async (paths: string[]) => {
6667
printInfo("清理结束");
6768
};
6869

69-
export default function clearInstaller(cli: CAC) {
70+
export default function clearInstaller(cli: CAC, config: CodeGeniusOptions) {
7071
return {
7172
name: "clearInstaller",
7273
setup: () => {
@@ -77,7 +78,7 @@ export default function clearInstaller(cli: CAC) {
7778
const { pattern } = options;
7879
let paths = [];
7980
if (!pattern) {
80-
const result = await generateEnquirer();
81+
const result = await generateEnquirer(config);
8182
paths = result.files;
8283
} else {
8384
paths =

src/command/eslint-fix.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ import type { CAC } from "cac";
33
import { ACTIVATION, eslintGlob } from "@/config";
44
import {
55
execCommand,
6-
loadConfigModule,
76
loggerError,
87
loggerInfo,
98
printError,
109
printInfo,
1110
} from "@/helper";
1211

13-
const mergeConfig = async () => {
14-
const config = await loadConfigModule();
12+
import { CodeGeniusOptions } from "./../types";
13+
14+
const mergeConfig = async (config: CodeGeniusOptions) => {
1515
const commands = config && config?.commands;
1616
if (commands && commands.fix) {
1717
const { paths } = commands.fix;
@@ -41,7 +41,10 @@ export const eslintFix = async (paths: string[]) => {
4141
}
4242
};
4343

44-
export default function eslintFixInstaller(cli: CAC) {
44+
export default function eslintFixInstaller(
45+
cli: CAC,
46+
config: CodeGeniusOptions,
47+
) {
4548
return {
4649
name: "eslintFixInstaller",
4750
setup: () => {
@@ -51,7 +54,7 @@ export default function eslintFixInstaller(cli: CAC) {
5154
default: [...eslintGlob],
5255
})
5356
.action(async (options) => {
54-
const { paths } = await mergeConfig();
57+
const { paths } = await mergeConfig(config);
5558
const { pattern } = options;
5659
if (pattern) {
5760
await eslintFix(typeof pattern === "string" ? [pattern] : pattern);

src/command/eslint-import-sort.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ import { ESLint } from "eslint";
66
import fs from "fs-extra";
77

88
import { ACTIVATION, impSortGlob } from "@/config";
9-
import { loadConfigModule, loggerInfo, printError, printInfo } from "@/helper";
9+
import { loggerInfo, printError, printInfo } from "@/helper";
1010
import { ImpSortOptions } from "@/types";
1111

12-
const mergeConfig = async () => {
13-
const config = await loadConfigModule();
12+
import { CodeGeniusOptions } from "./../types";
13+
14+
const mergeConfig = async (config: CodeGeniusOptions) => {
1415
const commands = config && config?.commands;
1516
if (commands && commands.impsort) {
1617
const { paths } = commands.impsort;
@@ -23,7 +24,9 @@ const mergeConfig = async () => {
2324
};
2425
};
2526

26-
const generateEnquirer = async (): Promise<ImpSortOptions> => {
27+
const generateEnquirer = async (
28+
config: CodeGeniusOptions,
29+
): Promise<ImpSortOptions> => {
2730
const files = fs
2831
.readdirSync(path.join(process.cwd(), "."))
2932
.filter((v) => !v.startsWith("."))
@@ -34,7 +37,7 @@ const generateEnquirer = async (): Promise<ImpSortOptions> => {
3437
};
3538
});
3639
files.sort((v1, v2) => v1.sort - v2.sort);
37-
const { paths } = await mergeConfig();
40+
const { paths } = await mergeConfig(config);
3841
const fileMultiChoices = files.map((v) => {
3942
return {
4043
name: `./${v.file}`,
@@ -82,7 +85,7 @@ export const impSort = async (paths: string[]) => {
8285
}
8386
};
8487

85-
export default function impSortInstaller(cli: CAC) {
88+
export default function impSortInstaller(cli: CAC, config: CodeGeniusOptions) {
8689
return {
8790
name: "impSortInstaller",
8891
setup: () => {
@@ -93,7 +96,7 @@ export default function impSortInstaller(cli: CAC) {
9396
const { pattern } = options;
9497
let paths = [];
9598
if (!pattern) {
96-
const result = await generateEnquirer();
99+
const result = await generateEnquirer(config);
97100
paths = result.files;
98101
} else {
99102
paths =

src/command/git-user.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ import type { CAC } from "cac";
33
import { ACTIVATION, gitUserOptions } from "@/config";
44
import {
55
execCommand,
6-
loadConfigModule,
76
loggerInfo,
87
printError,
98
printInfo,
109
printWarring,
1110
} from "@/helper";
1211

13-
const mergeConfig = async () => {
14-
const config = await loadConfigModule();
12+
import { CodeGeniusOptions } from "./../types";
13+
14+
const mergeConfig = async (config: CodeGeniusOptions) => {
1515
const commands = config && config?.commands;
1616
if (commands && commands.gituser) {
1717
const { ruleName, ruleEmail } = commands.gituser;
@@ -104,7 +104,7 @@ export async function checkGitUserEmail(ruleEmail: string) {
104104
}
105105
}
106106

107-
export default function gitUserInstaller(cli: CAC) {
107+
export default function gitUserInstaller(cli: CAC, config: CodeGeniusOptions) {
108108
return {
109109
name: "gitUserInstaller",
110110
setup: () => {
@@ -117,7 +117,7 @@ export default function gitUserInstaller(cli: CAC) {
117117
.option("--rule-name <regexp>", "设置 user.name 匹配规则(转义字符串)")
118118
.option("--rule-email <regexp>", "设置 user.email 匹配规则(转义字符串)")
119119
.action(async (options) => {
120-
const { ruleName, ruleEmail } = await mergeConfig();
120+
const { ruleName, ruleEmail } = await mergeConfig(config);
121121
const { name, email, ruleName: rName, ruleEmail: rEmail } = options;
122122
if (!name && !email) {
123123
await checkGitUserName(ruleName || rName);

src/command/prettier-format.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import type { CAC } from "cac";
22

33
import { ACTIVATION, formatGlob } from "@/config";
4-
import { execCommand, loadConfigModule, loggerInfo } from "@/helper";
4+
import { execCommand, loggerInfo } from "@/helper";
55

6-
const mergeConfig = async () => {
7-
const config = await loadConfigModule();
6+
import { CodeGeniusOptions } from "./../types";
7+
8+
const mergeConfig = async (config: CodeGeniusOptions) => {
89
const commands = config && config?.commands;
910
if (commands && commands.format) {
1011
const { paths } = commands.format;
@@ -27,15 +28,18 @@ export const prettierFormat = async (paths: string[]) => {
2728
});
2829
};
2930

30-
export default function prettierFormatInstaller(cli: CAC) {
31+
export default function prettierFormatInstaller(
32+
cli: CAC,
33+
config: CodeGeniusOptions,
34+
) {
3135
return {
3236
name: "prettierFormatInstaller",
3337
setup: () => {
3438
cli
3539
.command("format", "运行 prettier 格式化代码风格")
3640
.option("-p, --pattern <pattern>", "设置匹配规则")
3741
.action(async (options) => {
38-
const { paths } = await mergeConfig();
42+
const { paths } = await mergeConfig(config);
3943
const { pattern } = options;
4044
if (pattern) {
4145
await prettierFormat(

src/helper.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {
1717
TEMPLATES,
1818
} from "@/config";
1919

20-
import { CodeGeniusOptions, CommandOptions } from "./types";
20+
import { CodeGeniusOptions, CommandOptions, Plugins } from "./types";
2121

2222
const boxenBorderStyle = {
2323
padding: 1,
@@ -223,12 +223,10 @@ export const defineConfig = (config: CodeGeniusOptions): CodeGeniusOptions =>
223223
* @param cli
224224
* @param config
225225
*/
226-
export async function cmdInstaller(cli: CAC, config: CodeGeniusOptions) {
227-
const { plugins } = config;
228-
if (plugins) {
229-
for (const plugin of plugins) {
230-
plugin(cli).setup();
231-
}
226+
export async function cmdInstaller(cli: CAC, plugins: Plugins) {
227+
const userConfig = await loadConfigModule();
228+
for (const plugin of plugins) {
229+
plugin(cli, userConfig).setup();
232230
}
233231
}
234232

src/index.ts

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -29,34 +29,33 @@ import scriptRunInstaller from "@/command/script";
2929
import templateInstaller, { template } from "@/command/template";
3030
import { defineConfig } from "@/helper";
3131

32-
const config = defineConfig({
33-
plugins: [
34-
rootInstaller,
35-
gitCommitInstaller,
36-
gitCommitVerifyInstaller,
37-
gitUserInstaller,
38-
gitInitSimpleHooksInstaller,
39-
npmRegistryInstaller,
40-
clearInstaller,
41-
npmDepCheckInstaller,
42-
eslintFixInstaller,
43-
impSortInstaller,
44-
prettierFormatInstaller,
45-
createProjectInstaller,
46-
templateInstaller,
47-
lighthouseInstaller,
48-
quantityInstaller,
49-
scriptRunInstaller,
50-
],
51-
});
32+
import { Plugins } from "./types";
5233

53-
export { config, defineConfig };
34+
export const plugins = [
35+
rootInstaller,
36+
gitCommitInstaller,
37+
gitCommitVerifyInstaller,
38+
gitUserInstaller,
39+
gitInitSimpleHooksInstaller,
40+
npmRegistryInstaller,
41+
clearInstaller,
42+
npmDepCheckInstaller,
43+
eslintFixInstaller,
44+
impSortInstaller,
45+
prettierFormatInstaller,
46+
createProjectInstaller,
47+
templateInstaller,
48+
lighthouseInstaller,
49+
quantityInstaller,
50+
scriptRunInstaller,
51+
] as Plugins;
5452

5553
export {
5654
checkGitUserEmail,
5755
checkGitUserName,
5856
clear,
5957
createProject,
58+
defineConfig,
6059
eslintFix,
6160
gitCommit,
6261
gitCommitVerify,

src/types.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,17 @@ export interface CommitOptions {
5656
gitCommitScopes?: Array<CommitScope>;
5757
}
5858

59+
export type Plugins = Array<
60+
(
61+
cli: CAC,
62+
config: CodeGeniusOptions | undefined,
63+
) => {
64+
name: string;
65+
setup: () => void;
66+
}
67+
>;
68+
5969
export interface CodeGeniusOptions {
60-
plugins?: Array<
61-
(cli: CAC) => {
62-
name: string;
63-
setup: () => void;
64-
}
65-
>;
6670
commands?: {
6771
commit?: CommitOptions;
6872
clear?: ClearOptions;

0 commit comments

Comments
 (0)