Skip to content

Commit 00b2828

Browse files
committed
fix(init): handle skipped setup steps
1 parent 9022816 commit 00b2828

3 files changed

Lines changed: 35 additions & 20 deletions

File tree

‎packages/create-nuxt/src/init.ts‎

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -116,14 +116,15 @@ export function getNextSteps(options: {
116116
dir: string
117117
shell: boolean
118118
installFailure?: unknown
119+
installSkipped?: boolean
119120
recoveryCommands: string[]
120121
packageManager: PackageManagerName
121122
}): string[]{
122-
const{ dir, shell, installFailure, recoveryCommands, packageManager }=options
123+
const{ dir, shell, installFailure,installSkipped,recoveryCommands, packageManager }=options
123124
construnCmd=packageManager==='deno' ? 'task' : 'run'
124125
return[
125126
!shell&&dir!=='.'&&`cd ${dir}`,
126-
installFailure&&`${packageManager} install`,
127+
(installFailure||installSkipped)&&`${packageManager} install`,
127128
...recoveryCommands,
128129
`${packageManager}${runCmd} dev`,
129130
].filter((step): step is string=>typeofstep==='string')
@@ -459,7 +460,7 @@ export default defineCommand({
459460
}
460461

461462
constnightlyNuxtPackageJsonVersion=`npm:nuxt-nightly@${nightlyChannelVersion}`
462-
constpackageJsonPath=resolve(cwd,dir)
463+
constpackageJsonPath=join(template.dir,'package.json')
463464

464465
constpackageJson=awaitreadPackageJSON(packageJsonPath)
465466

@@ -470,7 +471,7 @@ export default defineCommand({
470471
packageJson.devDependencies.nuxt=nightlyNuxtPackageJsonVersion
471472
}
472473

473-
awaitwritePackageJSON(join(packageJsonPath,'package.json'),packageJson)
474+
awaitwritePackageJSON(packageJsonPath,packageJson)
474475
nightlySpinner.stop(`Updated to nightly version ${styleText('cyan',nightlyChannelVersion)}`)
475476
}
476477

@@ -599,20 +600,6 @@ export default defineCommand({
599600

600601
installLog.finish(result)
601602

602-
if(gitInit){
603-
constgitSpinner=spinner()
604-
gitSpinner.start('Initializing git repository')
605-
606-
constgit=awaitx('git',['init',template.dir],{throwOnError: false})
607-
if(git.exitCode===0){
608-
gitSpinner.stop('Git repository initialized')
609-
}
610-
else{
611-
gitSpinner.error('Git initialization failed')
612-
logger.message(git.stderr.trim().split('\n'),{symbol: styleText('gray',S_BAR)})
613-
}
614-
}
615-
616603
// `approve-builds` is a pnpm command, so only pnpm gets the offer even if
617604
// another package manager ever prints the same notice.
618605
if(ignoredBuilds.length>0&&selectedPackageManager==='pnpm'){
@@ -634,6 +621,23 @@ export default defineCommand({
634621
}
635622
}
636623

624+
if(gitInit){
625+
constgitSpinner=spinner()
626+
gitSpinner.start('Initializing git repository')
627+
628+
constgit=awaitx('git',['init'],{
629+
throwOnError: false,
630+
nodeOptions: {cwd: template.dir},
631+
})
632+
if(git.exitCode===0){
633+
gitSpinner.stop('Git repository initialized')
634+
}
635+
else{
636+
gitSpinner.error('Git initialization failed')
637+
logger.message(git.stderr.trim().split('\n'),{symbol: styleText('gray',S_BAR)})
638+
}
639+
}
640+
637641
constmodulesToAdd: string[]=[]
638642
// `ctx.args.modules` is `false` when --no-modules is used and `undefined`
639643
// when the user has not decided either way.
@@ -731,7 +735,7 @@ export default defineCommand({
731735
if(modulesToAdd.length>0){
732736
constargs: string[]=[
733737
...modulesToAdd,
734-
`--cwd=${templateDownloadPath}`,
738+
`--cwd=${template.dir}`,
735739
installRequested&&!skipInstallOnConflict ? '' : '--skipInstall',
736740
`--packageManager=${selectedPackageManager}`,
737741
ctx.args.logLevel ? `--logLevel=${ctx.args.logLevel}` : '',
@@ -777,6 +781,7 @@ export default defineCommand({
777781
dir: projectDir,
778782
shell: !!ctx.args.shell,
779783
installFailure,
784+
installSkipped: !installRequested&&!skipInstallOnConflict,
780785
recoveryCommands,
781786
packageManager: selectedPackageManager,
782787
})

‎packages/create-nuxt/test/e2e/init.spec.ts‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,14 @@ describe('non-interactive mode (no TTY)', () => {
3737

3838
awaitrm(installPath,{recursive: true,force: true})
3939
try{
40-
awaitx(createNuxt,[installPath,'--template=minimal','--packageManager=pnpm','--gitInit=false','--preferOffline','--install=false'],{
40+
constresult=awaitx(createNuxt,[installPath,'--template=minimal','--packageManager=pnpm','--gitInit=true','--preferOffline','--install=false'],{
4141
throwOnError: true,
4242
nodeOptions: {stdio: 'pipe',cwd: fixtureDir},
4343
})
4444

4545
expect(existsSync(join(installPath,'package.json'))).toBeTruthy()
46+
expect(existsSync(join(installPath,'.git'))).toBeTruthy()
47+
expect(result.stdout+result.stderr).toContain('pnpm install')
4648
}
4749
finally{
4850
awaitrm(installPath,{recursive: true,force: true})

‎packages/create-nuxt/test/unit/init.spec.ts‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ describe('getNextSteps', () => {
5454
expect(getNextSteps({ ...base,dir: 'my-app',shell: true})).toEqual(['npm run dev'])
5555
})
5656

57+
it('should include install when dependency installation was skipped',()=>{
58+
expect(getNextSteps({
59+
...base,
60+
dir: 'my-app',
61+
installSkipped: true,
62+
})).toEqual(['cd my-app','npm install','npm run dev'])
63+
})
64+
5765
it('should ask for a retried install before recovery commands',()=>{
5866
expect(getNextSteps({
5967
...base,

0 commit comments

Comments
 (0)