create-rspack 1.0.0-alpha.2 → 1.0.0-alpha.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/index.js CHANGED
@@ -20,6 +20,7 @@ yargs(hideBin(process.argv))
20
20
  const defaultProjectName = "rspack-project";
21
21
  let template = "react";
22
22
  let targetDir = defaultProjectName;
23
+
23
24
  const promptProjectDir = async () =>
24
25
  await prompts(
25
26
  [
@@ -37,13 +38,15 @@ yargs(hideBin(process.argv))
37
38
  );
38
39
 
39
40
  await promptProjectDir();
40
- let root = path.resolve(process.cwd(), targetDir);
41
+ let projectDir = getProjectDir(targetDir);
42
+ let root = path.resolve(process.cwd(), projectDir);
41
43
  while (fs.existsSync(root)) {
42
44
  console.log(
43
45
  `${targetDir} is not empty, please choose another project name`
44
46
  );
45
47
  await promptProjectDir();
46
- root = path.resolve(process.cwd(), targetDir);
48
+ projectDir = getProjectDir(targetDir);
49
+ root = path.resolve(process.cwd(), projectDir);
47
50
  }
48
51
 
49
52
  // choose template
@@ -69,17 +72,17 @@ yargs(hideBin(process.argv))
69
72
 
70
73
  fs.mkdirSync(root, { recursive: true });
71
74
  const srcFolder = path.resolve(__dirname, `template-${template}`);
72
- copyFolder(srcFolder, targetDir);
75
+ copyFolder(srcFolder, root, targetDir);
73
76
  const pkgManager = getPkgManager();
74
77
  console.log("\nDone. Now run:\n");
75
- console.log(`cd ${targetDir}\n`);
78
+ console.log(`cd ${projectDir}\n`);
76
79
  console.log(`${pkgManager} install\n`);
77
80
  console.log(`${pkgManager} run dev\n`);
78
81
  })
79
82
  .help()
80
83
  .parse();
81
84
 
82
- function copyFolder(src, dst) {
85
+ function copyFolder(src, dst, targetDir) {
83
86
  const renameFiles = {
84
87
  _gitignore: ".gitignore"
85
88
  };
@@ -95,7 +98,7 @@ function copyFolder(src, dst) {
95
98
  : path.resolve(dst, file);
96
99
  const stat = fs.statSync(srcFile);
97
100
  if (stat.isDirectory()) {
98
- copyFolder(srcFile, dstFile);
101
+ copyFolder(srcFile, dstFile, targetDir);
99
102
  } else {
100
103
  // use create-rspack version as @rspack/xxx version in template
101
104
  if (file === "package.json") {
@@ -114,6 +117,9 @@ function copyFolder(src, dst) {
114
117
  }
115
118
  }
116
119
  }
120
+ if (pkg.name) {
121
+ pkg.name = getPkgName(targetDir);
122
+ }
117
123
  fs.writeFileSync(dstFile, JSON.stringify(pkg, null, 2), "utf-8");
118
124
  } else {
119
125
  fs.copyFileSync(srcFile, dstFile);
@@ -122,6 +128,26 @@ function copyFolder(src, dst) {
122
128
  }
123
129
  }
124
130
 
131
+ function getPkgName(targetDir) {
132
+ const scopeMatch = matchScopedPackageName(targetDir);
133
+ if (scopeMatch) {
134
+ return targetDir; // Scoped package name
135
+ }
136
+ return path.basename(targetDir); // Use the base name of the target directory
137
+ }
138
+
139
+ function getProjectDir(targetDir) {
140
+ const scopeMatch = matchScopedPackageName(targetDir);
141
+ if (scopeMatch) {
142
+ return scopeMatch[1]; // Subdirectory project name for scoped packages
143
+ }
144
+ return targetDir;
145
+ }
146
+
147
+ function matchScopedPackageName(targetDir) {
148
+ return targetDir.match(/^@[^/]+\/(.+)/);
149
+ }
150
+
125
151
  function getPkgManager() {
126
152
  const ua = process.env.npm_config_user_agent;
127
153
  if (!ua) return "npm";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-rspack",
3
- "version": "1.0.0-alpha.2",
3
+ "version": "1.0.0-alpha.4",
4
4
  "license": "MIT",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -1,5 +1,5 @@
1
1
  declare module "*.vue" {
2
- import { DefineComponent } from "vue";
2
+ import type { DefineComponent } from "vue";
3
3
  const component: DefineComponent<{}, {}, any>;
4
4
  export default component;
5
5
  }
package/utils/index.js CHANGED
@@ -1,6 +1,4 @@
1
1
  /**
2
2
  * format the targetDir
3
3
  */
4
- exports.formatTargetDir = function (targetDir) {
5
- return targetDir.trim().replace(/\/+$/g, "");
6
- };
4
+ exports.formatTargetDir = targetDir => targetDir.trim().replace(/\/+$/g, "");