create-rspack 0.1.1 → 0.1.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # create-rspack
2
2
 
3
+ ## 0.1.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 6d482a7: fix yargs default command ad help
8
+ - 8f8e025: align optimizeChunkModules
9
+ - 0f0969a: feat: add the handling of duplicate project names
10
+ - 8c196ee: feat: support package manager detect
11
+
3
12
  ## 0.1.1
4
13
 
5
14
  ### Patch Changes
package/index.js CHANGED
@@ -4,31 +4,52 @@ const { hideBin } = require("yargs/helpers");
4
4
  const fs = require("fs");
5
5
  const path = require("path");
6
6
  const prompts = require("prompts");
7
+ const { formatTargetDir } = require("./utils");
7
8
  yargs(hideBin(process.argv))
8
9
  .command("$0", "init rspack project", async argv => {
10
+ const { help } = argv.argv;
11
+ if (help) return;
9
12
  const defaultProjectName = "rspack-project";
10
- let result = await prompts([
13
+ let targetDir = defaultProjectName;
14
+ await prompts([
11
15
  {
12
16
  type: "text",
13
17
  name: "projectDir",
14
18
  initial: defaultProjectName,
15
- message: "Project folder"
19
+ message: "Project folder",
20
+ onState: state => {
21
+ targetDir = formatTargetDir(state.value) || defaultProjectName;
22
+ }
16
23
  }
17
24
  ]);
18
- const { projectDir } = result;
19
- const root = path.resolve(process.cwd(), projectDir);
20
- if (fs.existsSync(root)) {
21
- throw new Error("project directory already exists");
25
+ let root = path.resolve(process.cwd(), targetDir);
26
+ while (fs.existsSync(root)) {
27
+ console.log(
28
+ `${targetDir} is not empty, please choose another project name`
29
+ );
30
+ await prompts([
31
+ {
32
+ type: "text",
33
+ name: "projectDir",
34
+ initial: defaultProjectName,
35
+ message: "Project folder",
36
+ onState: state => {
37
+ targetDir = formatTargetDir(state.value) || defaultProjectName;
38
+ }
39
+ }
40
+ ]);
41
+ root = path.resolve(process.cwd(), targetDir);
22
42
  }
23
- fs.mkdirSync(root);
43
+ fs.mkdirSync(root, { recursive: true });
24
44
  // TODO support more template in the future
25
45
  const templateDir = "template-react";
26
46
  const srcFolder = path.resolve(__dirname, templateDir);
27
- copyFolder(srcFolder, projectDir);
47
+ copyFolder(srcFolder, targetDir);
48
+ const pkgManager = getPkgManager();
28
49
  console.log("\nDone. Now run:\n");
29
- console.log(`cd ${projectDir}\n`);
30
- console.log(`npm install\n`);
31
- console.log(`npm run dev\n`);
50
+ console.log(`cd ${targetDir}\n`);
51
+ console.log(`${pkgManager} install\n`);
52
+ console.log(`${pkgManager} run dev\n`);
32
53
  })
33
54
  .help()
34
55
  .parse();
@@ -45,3 +66,11 @@ function copyFolder(src, dst) {
45
66
  }
46
67
  }
47
68
  }
69
+
70
+ function getPkgManager() {
71
+ const ua = process.env.npm_config_user_agent;
72
+ if (!ua) return "npm";
73
+ const [pkgInfo] = ua.split(" ");
74
+ const [name] = pkgInfo.split("/");
75
+ return name || "npm";
76
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-rspack",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "license": "MIT",
5
5
  "main": "index.js",
6
6
  "bin": {
package/utils/index.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * format the targetDir
3
+ */
4
+ exports.formatTargetDir = function (targetDir) {
5
+ return targetDir.trim().replace(/\/+$/g, "");
6
+ };