Nuxt/packages/nuxi/src/commands/init.ts

76 lines
2.2 KiB
TypeScript
Raw Normal View History

2021-10-05 20:35:23 +00:00
import { existsSync, readdirSync } from 'fs'
import createTiged from 'tiged'
2021-10-05 20:35:23 +00:00
import { relative, resolve } from 'pathe'
import superb from 'superb'
import consola from 'consola'
2021-10-05 20:35:23 +00:00
import { defineNuxtCommand } from './index'
const rpath = p => relative(process.cwd(), p)
const knownTemplates = {
nuxt3: 'nuxt/starter#v3',
v3: 'nuxt/starter#v3',
bridge: 'nuxt/starter#bridge'
}
const resolveTemplate = (template) => {
if (!template) {
return knownTemplates.nuxt3
}
if (typeof template === 'boolean') {
consola.error('Please specify a template')
process.exit(1)
}
if (template in knownTemplates) {
return knownTemplates[template]
}
if (template.includes('/')) {
return template
}
consola.error(`Invalid template name: \`${template}\``)
process.exit(1)
}
2021-10-05 20:35:23 +00:00
export default defineNuxtCommand({
meta: {
name: 'init',
2021-11-02 09:50:04 +00:00
usage: 'npx nuxi init|create [--verbose|-v] [--template,-t] [dir]',
2021-10-05 20:35:23 +00:00
description: 'Initialize a fresh project'
},
async invoke (args) {
// Clone template
const src = resolveTemplate(args.template || args.t)
2021-10-05 20:35:23 +00:00
const dstDir = resolve(process.cwd(), args._[0] || 'nuxt-app')
const tiged = createTiged(src, { cache: false /* TODO: buggy */, verbose: (args.verbose || args.v) })
2021-10-05 20:35:23 +00:00
if (existsSync(dstDir) && readdirSync(dstDir).length) {
consola.error(`Directory ${dstDir} is not empty. Please pick another name or remove it first. Aborting.`)
2021-10-05 20:35:23 +00:00
process.exit(1)
}
const formatArgs = msg => msg.replace('options.', '--')
tiged.on('warn', event => consola.warn(formatArgs(event.message)))
tiged.on('info', event => consola.info(formatArgs(event.message)))
try {
await tiged.clone(dstDir)
} catch (e) {
if (e.toString().includes('could not find commit hash')) {
2021-10-13 11:16:15 +00:00
consola.warn('Make sure you have installed `git` correctly')
process.exit(1)
}
throw e
}
2021-10-05 20:35:23 +00:00
// Show neet steps
console.log(`\n 🎉 Another ${superb.random()} Nuxt project just made! Next steps:` + [
2021-10-05 20:35:23 +00:00
'',
`📁 \`cd ${rpath(dstDir)}\``,
'💿 Install dependencies with `npm install` or `yarn install`',
'🚀 Start development server with `npm run dev` or `yarn dev`',
''
].join('\n\n '))
}
})