Skip to content

Commit 8d08220

Browse files
authored
chore(create-vite): add current directory description (#8501)
1 parent fba82d0 commit 8d08220

File tree

3 files changed

+27
-12
lines changed

3 files changed

+27
-12
lines changed

packages/create-vite/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ Currently supported template presets include:
5656
- `svelte`
5757
- `svelte-ts`
5858

59+
You can use `.` for the project name to scaffold in the current directory.
60+
5961
## Community Templates
6062

6163
create-vite is a tool to quickly start a project from a basic template for popular frameworks. Check out Awesome Vite for [community maintained templates](https://github.com/vitejs/awesome-vite#templates) that include other tools or target different frameworks. You can use a tool like [degit](https://github.com/Rich-Harris/degit) to scaffold your project with one of the templates.

packages/create-vite/__tests__/cli.spec.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ test('prompts for the project name if none supplied', () => {
4040
expect(stdout).toContain('Project name:')
4141
})
4242

43+
test('prompts for the framework if none supplied when target dir is current directory', () => {
44+
mkdirpSync(genPath)
45+
const { stdout } = run(['.'], { cwd: genPath })
46+
expect(stdout).toContain('Select a framework:')
47+
})
48+
4349
test('prompts for the framework if none supplied', () => {
4450
const { stdout } = run([projectName])
4551
expect(stdout).toContain('Select a framework:')
@@ -65,7 +71,7 @@ test('asks to overwrite non-empty target directory', () => {
6571

6672
test('asks to overwrite non-empty current directory', () => {
6773
createNonEmptyDir()
68-
const { stdout } = run(['.'], { cwd: genPath, input: 'test-app\n' })
74+
const { stdout } = run(['.'], { cwd: genPath })
6975
expect(stdout).toContain(`Current directory is not empty.`)
7076
})
7177

packages/create-vite/index.js

+18-11
Original file line numberDiff line numberDiff line change
@@ -130,12 +130,12 @@ const renameFiles = {
130130
}
131131

132132
async function init() {
133-
let targetDir = argv._[0]
133+
let targetDir = formatTargetDir(argv._[0])
134134
let template = argv.template || argv.t
135135

136-
const defaultProjectName = !targetDir
137-
? 'vite-project'
138-
: targetDir.trim().replace(/\/+$/g, '')
136+
const defaultTargetDir = 'vite-project'
137+
const getProjectName = () =>
138+
targetDir === '.' ? path.basename(path.resolve()) : targetDir
139139

140140
let result = {}
141141

@@ -146,10 +146,10 @@ async function init() {
146146
type: targetDir ? null : 'text',
147147
name: 'projectName',
148148
message: reset('Project name:'),
149-
initial: defaultProjectName,
150-
onState: (state) =>
151-
(targetDir =
152-
state.value.trim().replace(/\/+$/g, '') || defaultProjectName)
149+
initial: defaultTargetDir,
150+
onState: (state) => {
151+
targetDir = formatTargetDir(state.value) || defaultTargetDir
152+
}
153153
},
154154
{
155155
type: () =>
@@ -171,10 +171,10 @@ async function init() {
171171
name: 'overwriteChecker'
172172
},
173173
{
174-
type: () => (isValidPackageName(targetDir) ? null : 'text'),
174+
type: () => (isValidPackageName(getProjectName()) ? null : 'text'),
175175
name: 'packageName',
176176
message: reset('Package name:'),
177-
initial: () => toValidPackageName(targetDir),
177+
initial: () => toValidPackageName(getProjectName()),
178178
validate: (dir) =>
179179
isValidPackageName(dir) || 'Invalid package.json name'
180180
},
@@ -265,7 +265,7 @@ async function init() {
265265
fs.readFileSync(path.join(templateDir, `package.json`), 'utf-8')
266266
)
267267

268-
pkg.name = packageName || targetDir
268+
pkg.name = packageName || getProjectName()
269269

270270
write('package.json', JSON.stringify(pkg, null, 2))
271271

@@ -289,6 +289,13 @@ async function init() {
289289
console.log()
290290
}
291291

292+
/**
293+
* @param {string | undefined} targetDir
294+
*/
295+
function formatTargetDir(targetDir) {
296+
return targetDir?.trim().replace(/\/+$/g, '')
297+
}
298+
292299
function copy(src, dest) {
293300
const stat = fs.statSync(src)
294301
if (stat.isDirectory()) {

0 commit comments

Comments
 (0)