zixulu 0.0.1 → 0.0.2

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 +48 -40
  2. package/package.json +1 -1
  3. package/src/index.ts +46 -37
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { Command } from 'commander';
3
3
  import { createPromptModule } from 'inquirer';
4
4
  import { readdirSync, mkdirSync, writeFileSync, statSync, readFileSync } from 'fs';
5
5
 
6
- var name = "deep-sea";
6
+ var name = "zixulu";
7
7
  var version = "0.0.1";
8
8
  var main = "index.js";
9
9
  var license = "MIT";
@@ -41,6 +41,11 @@ var pkg = {
41
41
  const prompt = createPromptModule();
42
42
  const packageNameReg = /^[a-z0-9]{1}[-_a-z0-9]{0,213}$/i;
43
43
  const JavaScriptTargets = ["ES2015", "ES2016", "ES2017", "ES2018", "ES2019", "ES2020", "ES2021", "ES2022", "ES2023", "ESNext"];
44
+ async function getPackageLatestVersion(name) {
45
+ const response = await fetch(`https://registry.npmjs.org/${name}`);
46
+ const data = await response.json();
47
+ return data["dist-tags"].latest;
48
+ }
44
49
  function getBuildJS(answer) {
45
50
  const { target, css } = answer;
46
51
  if (css) {
@@ -97,37 +102,38 @@ execSync("npx tsc --sourceMap -module ${target} -outDir dist/esm && npx tsc --so
97
102
  `;
98
103
  }
99
104
  async function getPackageJson(answer) {
100
- const { name } = answer;
101
- const response = await fetch("https://registry.npmjs.org/typescript");
102
- const data = await response.json();
103
- return `{
104
- "name": "${name}",
105
- "version": "0.0.1",
106
- "main": "dist/cjs/index.js",
107
- "module": "dist/esm/index.js",
108
- "types": "dist/index.d.ts",
109
- "license": "MIT",
110
- "type": "module",
111
- "exports": {
112
- ".": {
113
- "import": {
114
- "types": "./dist/index.d.ts",
115
- "default": "./dist/esm/index.js"
116
- },
117
- "require": {
118
- "types": "./dist/index.d.ts",
119
- "default": "./dist/cjs/index.js"
120
- }
121
- }
122
- },
123
- "scripts": {
124
- "build": "node ./build.js"
125
- },
126
- "devDependencies": {
127
- "typescript": "^${data["dist-tags"].latest}"
128
- }
129
- }
130
- `;
105
+ const { name, react } = answer;
106
+ const info = {
107
+ name,
108
+ version: "0.0.1",
109
+ main: "dist/cjs/index.js",
110
+ module: "dist/esm/index.js",
111
+ types: "dist/index.d.ts",
112
+ license: "MIT",
113
+ type: "module",
114
+ 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
+ }
125
+ },
126
+ scripts: {
127
+ build: "node ./build.js"
128
+ },
129
+ devDependencies: {}
130
+ };
131
+ if (react) {
132
+ info.devDependencies["@types/react"] = `^${await getPackageLatestVersion("@types/react")}`;
133
+ info.devDependencies["@types/react-dom"] = `^${await getPackageLatestVersion("@types/react-dom")}`;
134
+ }
135
+ info.devDependencies.typescript = `^${await getPackageLatestVersion("typescript")}`;
136
+ return JSON.stringify(info, null, 4);
131
137
  }
132
138
  function getTSConfig(answer) {
133
139
  const { react, target } = answer;
@@ -277,7 +283,7 @@ function getProjectAnswer(...exclude) {
277
283
  type: "confirm",
278
284
  name: "css",
279
285
  message: "是否打包 CSS:",
280
- default: true
286
+ default: false
281
287
  },
282
288
  {
283
289
  type: "confirm",
@@ -303,8 +309,8 @@ program
303
309
  .description("初始化 npm 项目")
304
310
  .option("-n --name <name>", "指定项目名称")
305
311
  .option("-r --react", "指定为 react 项目")
312
+ .option("-c --css", "打包 CSS")
306
313
  .option("-t --target <target>", "指定 JavaScript 版本")
307
- .option("--no-css", "不打包 CSS")
308
314
  .option("--no-esm", "不打包 ES Module")
309
315
  .option("--no-cjs", "不打包 Common JS")
310
316
  .action(async (options) => {
@@ -319,15 +325,15 @@ program
319
325
  initAnswer.react = true;
320
326
  exclude.push("react");
321
327
  }
328
+ if ("css" in options) {
329
+ initAnswer.css = true;
330
+ exclude.push("css");
331
+ }
322
332
  if ("target" in options) {
323
333
  validateTarget(options.target);
324
334
  exclude.push("target");
325
335
  initAnswer.target = options.target.trim().toUpperCase();
326
336
  }
327
- if (options.css === false) {
328
- exclude.push("css");
329
- initAnswer.css = false;
330
- }
331
337
  if (options.esm === false) {
332
338
  exclude.push("esm");
333
339
  initAnswer.esm = false;
@@ -343,14 +349,15 @@ program
343
349
  mkdirSync(`./${name}`);
344
350
  }
345
351
  mkdirSync(`./${name}/src`);
346
- writeFileSync(`./${name}/src/index.${react ? "tsx" : "ts"}`, "");
352
+ writeFileSync(`./${name}/src/index.${react ? "tsx" : "ts"}`, 'export default "Hello, world!"');
347
353
  writeFileSync(`./${name}/build.js`, getBuildJS(answer));
348
354
  writeFileSync(`./${name}/package.json`, await getPackageJson(answer));
349
355
  writeFileSync(`./${name}/tsconfig.json`, getTSConfig(answer));
356
+ console.log("创建项目成功");
350
357
  });
351
358
  program
352
359
  .command("build")
353
- .description("更改打包命令")
360
+ .description("更新打包命令")
354
361
  .option("--no-css", "不打包 CSS")
355
362
  .action(options => {
356
363
  const { css } = options;
@@ -365,5 +372,6 @@ program
365
372
  const config = readFileSync("./tsconfig.json", "utf-8");
366
373
  const target = config.match(/"target":[ ]*?"(.+?)"/i)[1].toUpperCase();
367
374
  writeFileSync("./build.js", getBuildJS({ target, css }));
375
+ console.log("更新打包命令成功");
368
376
  });
369
377
  program.parse();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zixulu",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "main": "index.js",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/src/index.ts CHANGED
@@ -22,6 +22,12 @@ interface ProjectAnswer {
22
22
 
23
23
  const JavaScriptTargets: JavaScriptTarget[] = ["ES2015", "ES2016", "ES2017", "ES2018", "ES2019", "ES2020", "ES2021", "ES2022", "ES2023", "ESNext"]
24
24
 
25
+ async function getPackageLatestVersion(name: string) {
26
+ const response = await fetch(`https://registry.npmjs.org/${name}`)
27
+ const data = await response.json()
28
+ return data["dist-tags"].latest
29
+ }
30
+
25
31
  function getBuildJS(answer: Pick<ProjectAnswer, "target" | "css">) {
26
32
  const { target, css } = answer
27
33
  if (css) {
@@ -79,37 +85,38 @@ execSync("npx tsc --sourceMap -module ${target} -outDir dist/esm && npx tsc --so
79
85
  }
80
86
 
81
87
  async function getPackageJson(answer: ProjectAnswer) {
82
- const { name } = answer
83
- const response = await fetch("https://registry.npmjs.org/typescript")
84
- const data = await response.json()
85
- return `{
86
- "name": "${name}",
87
- "version": "0.0.1",
88
- "main": "dist/cjs/index.js",
89
- "module": "dist/esm/index.js",
90
- "types": "dist/index.d.ts",
91
- "license": "MIT",
92
- "type": "module",
93
- "exports": {
94
- ".": {
95
- "import": {
96
- "types": "./dist/index.d.ts",
97
- "default": "./dist/esm/index.js"
98
- },
99
- "require": {
100
- "types": "./dist/index.d.ts",
101
- "default": "./dist/cjs/index.js"
88
+ const { name, react } = answer
89
+ const info: any = {
90
+ name,
91
+ version: "0.0.1",
92
+ main: "dist/cjs/index.js",
93
+ module: "dist/esm/index.js",
94
+ types: "dist/index.d.ts",
95
+ license: "MIT",
96
+ type: "module",
97
+ 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
+ }
102
107
  }
103
- }
104
- },
105
- "scripts": {
106
- "build": "node ./build.js"
107
- },
108
- "devDependencies": {
109
- "typescript": "^${data["dist-tags"].latest}"
108
+ },
109
+ scripts: {
110
+ build: "node ./build.js"
111
+ },
112
+ devDependencies: {}
110
113
  }
111
- }
112
- `
114
+ if (react) {
115
+ info.devDependencies["@types/react"] = `^${await getPackageLatestVersion("@types/react")}`
116
+ info.devDependencies["@types/react-dom"] = `^${await getPackageLatestVersion("@types/react-dom")}`
117
+ }
118
+ info.devDependencies.typescript = `^${await getPackageLatestVersion("typescript")}`
119
+ return JSON.stringify(info, null, 4)
113
120
  }
114
121
 
115
122
  function getTSConfig(answer: ProjectAnswer) {
@@ -263,7 +270,7 @@ function getProjectAnswer<T extends keyof ProjectAnswer>(...exclude: T[]): Promi
263
270
  type: "confirm",
264
271
  name: "css",
265
272
  message: "是否打包 CSS:",
266
- default: true
273
+ default: false
267
274
  },
268
275
  {
269
276
  type: "confirm",
@@ -294,8 +301,8 @@ program
294
301
  .description("初始化 npm 项目")
295
302
  .option("-n --name <name>", "指定项目名称")
296
303
  .option("-r --react", "指定为 react 项目")
304
+ .option("-c --css", "打包 CSS")
297
305
  .option("-t --target <target>", "指定 JavaScript 版本")
298
- .option("--no-css", "不打包 CSS")
299
306
  .option("--no-esm", "不打包 ES Module")
300
307
  .option("--no-cjs", "不打包 Common JS")
301
308
  .action(async (options: Partial<ProjectAnswer>) => {
@@ -310,15 +317,15 @@ program
310
317
  initAnswer.react = true
311
318
  exclude.push("react")
312
319
  }
320
+ if ("css" in options) {
321
+ initAnswer.css = true
322
+ exclude.push("css")
323
+ }
313
324
  if ("target" in options) {
314
325
  validateTarget(options.target!)
315
326
  exclude.push("target")
316
327
  initAnswer.target = options.target!.trim().toUpperCase() as JavaScriptTarget
317
328
  }
318
- if (options.css === false) {
319
- exclude.push("css")
320
- initAnswer.css = false
321
- }
322
329
  if (options.esm === false) {
323
330
  exclude.push("esm")
324
331
  initAnswer.esm = false
@@ -334,15 +341,16 @@ program
334
341
  mkdirSync(`./${name}`)
335
342
  }
336
343
  mkdirSync(`./${name}/src`)
337
- writeFileSync(`./${name}/src/index.${react ? "tsx" : "ts"}`, "")
344
+ writeFileSync(`./${name}/src/index.${react ? "tsx" : "ts"}`, 'export default "Hello, world!"')
338
345
  writeFileSync(`./${name}/build.js`, getBuildJS(answer))
339
346
  writeFileSync(`./${name}/package.json`, await getPackageJson(answer))
340
347
  writeFileSync(`./${name}/tsconfig.json`, getTSConfig(answer))
348
+ console.log("创建项目成功")
341
349
  })
342
350
 
343
351
  program
344
352
  .command("build")
345
- .description("更改打包命令")
353
+ .description("更新打包命令")
346
354
  .option("--no-css", "不打包 CSS")
347
355
  .action(options => {
348
356
  const { css } = options
@@ -357,6 +365,7 @@ program
357
365
  const config = readFileSync("./tsconfig.json", "utf-8")
358
366
  const target = config.match(/"target":[ ]*?"(.+?)"/i)![1].toUpperCase() as JavaScriptTarget
359
367
  writeFileSync("./build.js", getBuildJS({ target, css }))
368
+ console.log("更新打包命令成功")
360
369
  })
361
370
 
362
371
  program.parse()