2018-12-20 11:15:48 +00:00
import fs from 'fs'
import execa from 'execa'
2019-07-04 12:58:07 +00:00
import { name as pkgName } from '../package.json'
2018-10-29 22:16:16 +00:00
import NuxtCommand from './command'
2018-10-25 07:43:42 +00:00
import setup from './setup'
2018-12-20 11:15:48 +00:00
import getCommand from './commands'
2018-10-25 07:43:42 +00:00
2019-07-10 10:45:49 +00:00
function packageExists ( name ) {
2019-07-10 09:57:31 +00:00
try {
require . resolve ( name )
return true
} catch ( e ) {
return false
2019-07-04 12:58:07 +00:00
}
}
2019-07-10 10:45:49 +00:00
export default async function run ( _argv ) {
2019-07-10 09:57:31 +00:00
// Check for not installing both nuxt and nuxt-edge
const dupPkg = '@nuxt/' + ( pkgName === '@nuxt/cli-edge' ? 'cli' : 'cli-edge' )
if ( packageExists ( dupPkg ) ) {
throw new Error ( 'Both `nuxt` and `nuxt-edge` dependencies are installed! This is unsupported, please choose one and remove the other one from dependencies.' )
}
2019-07-04 12:58:07 +00:00
2018-12-20 11:15:48 +00:00
// Read from process.argv
const argv = _argv ? Array . from ( _argv ) : process . argv . slice ( 2 )
2018-10-25 07:43:42 +00:00
2018-12-20 11:15:48 +00:00
// Check for internal command
let cmd = await getCommand ( argv [ 0 ] )
// Matching `nuxt` or `nuxt [dir]` or `nuxt -*` for `nuxt dev` shortcut
if ( ! cmd && ( ! argv [ 0 ] || argv [ 0 ] [ 0 ] === '-' || fs . existsSync ( argv [ 0 ] ) ) ) {
argv . unshift ( 'dev' )
cmd = await getCommand ( 'dev' )
2018-10-25 07:43:42 +00:00
}
2018-12-20 11:15:48 +00:00
// Setup env
setup ( { dev : argv [ 0 ] === 'dev' } )
// Try internal command
if ( cmd ) {
return NuxtCommand . run ( cmd , argv . slice ( 1 ) )
}
2018-10-25 07:43:42 +00:00
2018-12-20 11:15:48 +00:00
// Try external command
try {
await execa ( ` nuxt- ${ argv [ 0 ] } ` , argv . slice ( 1 ) , {
stdout : process . stdout ,
stderr : process . stderr ,
stdin : process . stdin
2018-10-25 07:43:42 +00:00
} )
2018-12-20 11:15:48 +00:00
} catch ( error ) {
2019-06-25 15:48:53 +00:00
if ( error . exitCode === 2 ) {
2018-12-20 11:15:48 +00:00
throw String ( ` Command not found: nuxt- ${ argv [ 0 ] } ` )
}
2019-02-08 16:25:11 +00:00
throw String ( ` Failed to run command \` nuxt- ${ argv [ 0 ] } \` : \n ${ error } ` )
2018-12-20 11:15:48 +00:00
}
2018-10-25 07:43:42 +00:00
}