zixulu 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +47 -14
- package/package.json +1 -1
- package/src/index.ts +49 -13
package/dist/index.js
CHANGED
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import { createPromptModule } from 'inquirer';
|
|
4
4
|
import { readdirSync, mkdirSync, writeFileSync, statSync, readFileSync } from 'fs';
|
|
5
|
+
import { execSync } from 'child_process';
|
|
5
6
|
|
|
6
7
|
var name = "zixulu";
|
|
7
|
-
var version = "0.0.
|
|
8
|
+
var version = "0.0.3";
|
|
8
9
|
var main = "index.js";
|
|
9
10
|
var license = "MIT";
|
|
10
11
|
var type = "module";
|
|
@@ -40,6 +41,18 @@ var pkg = {
|
|
|
40
41
|
|
|
41
42
|
const prompt = createPromptModule();
|
|
42
43
|
const packageNameReg = /^[a-z0-9]{1}[-_a-z0-9]{0,213}$/i;
|
|
44
|
+
const JavaScriptTemplate = `export default "Hello, world!"`;
|
|
45
|
+
const reactTemplate = `import React, { FC } from "react"
|
|
46
|
+
|
|
47
|
+
const MyComponent: FC = () => {
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<div>Hello, world!</div>
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export default MyComponent
|
|
55
|
+
`;
|
|
43
56
|
const JavaScriptTargets = ["ES2015", "ES2016", "ES2017", "ES2018", "ES2019", "ES2020", "ES2021", "ES2022", "ES2023", "ESNext"];
|
|
44
57
|
async function getPackageLatestVersion(name) {
|
|
45
58
|
const response = await fetch(`https://registry.npmjs.org/${name}`);
|
|
@@ -102,7 +115,7 @@ execSync("npx tsc --sourceMap -module ${target} -outDir dist/esm && npx tsc --so
|
|
|
102
115
|
`;
|
|
103
116
|
}
|
|
104
117
|
async function getPackageJson(answer) {
|
|
105
|
-
const { name, react } = answer;
|
|
118
|
+
const { name, react, esm, cjs } = answer;
|
|
106
119
|
const info = {
|
|
107
120
|
name,
|
|
108
121
|
version: "0.0.1",
|
|
@@ -112,22 +125,25 @@ async function getPackageJson(answer) {
|
|
|
112
125
|
license: "MIT",
|
|
113
126
|
type: "module",
|
|
114
127
|
exports: {
|
|
115
|
-
".": {
|
|
116
|
-
import: {
|
|
117
|
-
types: "./dist/index.d.ts",
|
|
118
|
-
default: "./dist/esm/index.js"
|
|
119
|
-
},
|
|
120
|
-
require: {
|
|
121
|
-
types: "./dist/index.d.ts",
|
|
122
|
-
default: "./dist/cjs/index.js"
|
|
123
|
-
}
|
|
124
|
-
}
|
|
128
|
+
".": {}
|
|
125
129
|
},
|
|
126
130
|
scripts: {
|
|
127
131
|
build: "node ./build.js"
|
|
128
132
|
},
|
|
129
133
|
devDependencies: {}
|
|
130
134
|
};
|
|
135
|
+
if (esm) {
|
|
136
|
+
info.exports["."]["import"] = {
|
|
137
|
+
types: "./dist/index.d.ts",
|
|
138
|
+
default: "./dist/esm/index.js"
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
if (cjs) {
|
|
142
|
+
info.exports["."]["require"] = {
|
|
143
|
+
types: "./dist/index.d.ts",
|
|
144
|
+
default: "./dist/cjs/index.js"
|
|
145
|
+
};
|
|
146
|
+
}
|
|
131
147
|
if (react) {
|
|
132
148
|
info.devDependencies["@types/react"] = `^${await getPackageLatestVersion("@types/react")}`;
|
|
133
149
|
info.devDependencies["@types/react-dom"] = `^${await getPackageLatestVersion("@types/react-dom")}`;
|
|
@@ -296,6 +312,13 @@ function getProjectAnswer(...exclude) {
|
|
|
296
312
|
name: "cjs",
|
|
297
313
|
message: "是否打包 Common JS:",
|
|
298
314
|
default: true
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
type: "list",
|
|
318
|
+
name: "install",
|
|
319
|
+
message: "现在就安装依赖:",
|
|
320
|
+
choices: ["Yarn", "Pnpm", "Npm", "No"],
|
|
321
|
+
default: "Yarn"
|
|
299
322
|
}
|
|
300
323
|
].filter(it => exclude.every(i => i !== it.name)));
|
|
301
324
|
}
|
|
@@ -342,17 +365,27 @@ program
|
|
|
342
365
|
exclude.push("cjs");
|
|
343
366
|
initAnswer.cjs = false;
|
|
344
367
|
}
|
|
368
|
+
if (options.esm === false && options.cjs === false) {
|
|
369
|
+
throw new Error("必须选择 ES Module 和 Common JS 至少一种");
|
|
370
|
+
}
|
|
345
371
|
const answer = { ...initAnswer, ...(await getProjectAnswer(...exclude)) };
|
|
346
|
-
const { name, react } = answer;
|
|
372
|
+
const { name, react, install, esm, cjs } = answer;
|
|
373
|
+
if (esm === false && cjs === false) {
|
|
374
|
+
throw new Error("必须选择 ES Module 和 Common JS 至少一种");
|
|
375
|
+
}
|
|
347
376
|
const dir = readdirSync("./");
|
|
348
377
|
if (!dir.includes(name)) {
|
|
349
378
|
mkdirSync(`./${name}`);
|
|
350
379
|
}
|
|
351
380
|
mkdirSync(`./${name}/src`);
|
|
352
|
-
writeFileSync(`./${name}/src/index.${react ? "tsx" : "ts"}`,
|
|
381
|
+
writeFileSync(`./${name}/src/index.${react ? "tsx" : "ts"}`, react ? reactTemplate : JavaScriptTemplate);
|
|
353
382
|
writeFileSync(`./${name}/build.js`, getBuildJS(answer));
|
|
354
383
|
writeFileSync(`./${name}/package.json`, await getPackageJson(answer));
|
|
355
384
|
writeFileSync(`./${name}/tsconfig.json`, getTSConfig(answer));
|
|
385
|
+
writeFileSync(`./${name}/.gitignore`, "node_modules");
|
|
386
|
+
if (install !== "No") {
|
|
387
|
+
execSync(`${install.toLowerCase()} install`, { cwd: `./${name}` });
|
|
388
|
+
}
|
|
356
389
|
console.log("创建项目成功");
|
|
357
390
|
});
|
|
358
391
|
program
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -4,11 +4,26 @@ import { Command } from "commander"
|
|
|
4
4
|
import pkg from "../package.json"
|
|
5
5
|
import { createPromptModule } from "inquirer"
|
|
6
6
|
import { mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "fs"
|
|
7
|
+
import { execSync } from "child_process"
|
|
7
8
|
|
|
8
9
|
const prompt = createPromptModule()
|
|
9
10
|
|
|
10
11
|
const packageNameReg = /^[a-z0-9]{1}[-_a-z0-9]{0,213}$/i
|
|
11
12
|
|
|
13
|
+
const JavaScriptTemplate = `export default "Hello, world!"`
|
|
14
|
+
|
|
15
|
+
const reactTemplate = `import React, { FC } from "react"
|
|
16
|
+
|
|
17
|
+
const MyComponent: FC = () => {
|
|
18
|
+
|
|
19
|
+
return (
|
|
20
|
+
<div>Hello, world!</div>
|
|
21
|
+
)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default MyComponent
|
|
25
|
+
`
|
|
26
|
+
|
|
12
27
|
type JavaScriptTarget = "ES2015" | "ES2016" | "ES2017" | "ES2018" | "ES2019" | "ES2020" | "ES2021" | "ES2022" | "ES2023" | "ESNext"
|
|
13
28
|
|
|
14
29
|
interface ProjectAnswer {
|
|
@@ -18,6 +33,7 @@ interface ProjectAnswer {
|
|
|
18
33
|
css: boolean
|
|
19
34
|
esm: boolean
|
|
20
35
|
cjs: boolean
|
|
36
|
+
install: "No" | "Yarn" | "Pnpm" | "Npm"
|
|
21
37
|
}
|
|
22
38
|
|
|
23
39
|
const JavaScriptTargets: JavaScriptTarget[] = ["ES2015", "ES2016", "ES2017", "ES2018", "ES2019", "ES2020", "ES2021", "ES2022", "ES2023", "ESNext"]
|
|
@@ -85,7 +101,7 @@ execSync("npx tsc --sourceMap -module ${target} -outDir dist/esm && npx tsc --so
|
|
|
85
101
|
}
|
|
86
102
|
|
|
87
103
|
async function getPackageJson(answer: ProjectAnswer) {
|
|
88
|
-
const { name, react } = answer
|
|
104
|
+
const { name, react, esm, cjs } = answer
|
|
89
105
|
const info: any = {
|
|
90
106
|
name,
|
|
91
107
|
version: "0.0.1",
|
|
@@ -95,22 +111,25 @@ async function getPackageJson(answer: ProjectAnswer) {
|
|
|
95
111
|
license: "MIT",
|
|
96
112
|
type: "module",
|
|
97
113
|
exports: {
|
|
98
|
-
".": {
|
|
99
|
-
import: {
|
|
100
|
-
types: "./dist/index.d.ts",
|
|
101
|
-
default: "./dist/esm/index.js"
|
|
102
|
-
},
|
|
103
|
-
require: {
|
|
104
|
-
types: "./dist/index.d.ts",
|
|
105
|
-
default: "./dist/cjs/index.js"
|
|
106
|
-
}
|
|
107
|
-
}
|
|
114
|
+
".": {}
|
|
108
115
|
},
|
|
109
116
|
scripts: {
|
|
110
117
|
build: "node ./build.js"
|
|
111
118
|
},
|
|
112
119
|
devDependencies: {}
|
|
113
120
|
}
|
|
121
|
+
if (esm) {
|
|
122
|
+
info.exports["."]["import"] = {
|
|
123
|
+
types: "./dist/index.d.ts",
|
|
124
|
+
default: "./dist/esm/index.js"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (cjs) {
|
|
128
|
+
info.exports["."]["require"] = {
|
|
129
|
+
types: "./dist/index.d.ts",
|
|
130
|
+
default: "./dist/cjs/index.js"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
114
133
|
if (react) {
|
|
115
134
|
info.devDependencies["@types/react"] = `^${await getPackageLatestVersion("@types/react")}`
|
|
116
135
|
info.devDependencies["@types/react-dom"] = `^${await getPackageLatestVersion("@types/react-dom")}`
|
|
@@ -283,6 +302,13 @@ function getProjectAnswer<T extends keyof ProjectAnswer>(...exclude: T[]): Promi
|
|
|
283
302
|
name: "cjs",
|
|
284
303
|
message: "是否打包 Common JS:",
|
|
285
304
|
default: true
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
type: "list",
|
|
308
|
+
name: "install",
|
|
309
|
+
message: "现在就安装依赖:",
|
|
310
|
+
choices: ["Yarn", "Pnpm", "Npm", "No"],
|
|
311
|
+
default: "Yarn"
|
|
286
312
|
}
|
|
287
313
|
].filter(it => exclude.every(i => i !== it.name))
|
|
288
314
|
)
|
|
@@ -334,17 +360,27 @@ program
|
|
|
334
360
|
exclude.push("cjs")
|
|
335
361
|
initAnswer.cjs = false
|
|
336
362
|
}
|
|
363
|
+
if (options.esm === false && options.cjs === false) {
|
|
364
|
+
throw new Error("必须选择 ES Module 和 Common JS 至少一种")
|
|
365
|
+
}
|
|
337
366
|
const answer = { ...initAnswer, ...(await getProjectAnswer(...exclude)) } as ProjectAnswer
|
|
338
|
-
const { name, react } = answer
|
|
367
|
+
const { name, react, install, esm, cjs } = answer
|
|
368
|
+
if (esm === false && cjs === false) {
|
|
369
|
+
throw new Error("必须选择 ES Module 和 Common JS 至少一种")
|
|
370
|
+
}
|
|
339
371
|
const dir = readdirSync("./")
|
|
340
372
|
if (!dir.includes(name)) {
|
|
341
373
|
mkdirSync(`./${name}`)
|
|
342
374
|
}
|
|
343
375
|
mkdirSync(`./${name}/src`)
|
|
344
|
-
writeFileSync(`./${name}/src/index.${react ? "tsx" : "ts"}`,
|
|
376
|
+
writeFileSync(`./${name}/src/index.${react ? "tsx" : "ts"}`, react ? reactTemplate : JavaScriptTemplate)
|
|
345
377
|
writeFileSync(`./${name}/build.js`, getBuildJS(answer))
|
|
346
378
|
writeFileSync(`./${name}/package.json`, await getPackageJson(answer))
|
|
347
379
|
writeFileSync(`./${name}/tsconfig.json`, getTSConfig(answer))
|
|
380
|
+
writeFileSync(`./${name}/.gitignore`, "node_modules")
|
|
381
|
+
if (install !== "No") {
|
|
382
|
+
execSync(`${install.toLowerCase()} install`, { cwd: `./${name}` })
|
|
383
|
+
}
|
|
348
384
|
console.log("创建项目成功")
|
|
349
385
|
})
|
|
350
386
|
|