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.
Files changed (3) hide show
  1. package/dist/index.js +47 -14
  2. package/package.json +1 -1
  3. 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.1";
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"}`, 'export default "Hello, world!"');
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zixulu",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "type": "module",
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"}`, 'export default "Hello, world!"')
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