xgplayer.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #!/usr/bin/env node
  2. const chalk = require('chalk')
  3. const path = require('path')
  4. const eject = require('./eject')
  5. const program = require('commander')
  6. program
  7. .version(require('../package.json').version)
  8. .usage('<command> [options]')
  9. program
  10. .version(require('../package.json').version)
  11. .command('eject <dir> [otherDirs...]')
  12. .description('copy the default skin into .xgplayer/skin for customization.')
  13. .action((dir = '.', otherDirs = ['custom']) => {
  14. wrapCommand(eject)(path.resolve(dir), otherDirs[0])
  15. })
  16. // output help information on unknown commands
  17. program
  18. .arguments('<command>')
  19. .action((cmd) => {
  20. program.outputHelp()
  21. console.log(` ` + chalk.red(`Unknown command ${chalk.yellow(cmd)}.`))
  22. console.log()
  23. })
  24. // add some useful info on help
  25. program.on('--help', () => {
  26. console.log()
  27. console.log(` Run ${chalk.cyan(`xgplayer <command> --help`)} for detailed usage of given command.`)
  28. console.log()
  29. })
  30. program.commands.forEach(c => c.on('--help', () => console.log()))
  31. // enhance common error messages
  32. const enhanceErrorMessages = (methodName, log) => {
  33. program.Command.prototype[methodName] = function (...args) {
  34. if (methodName === 'unknownOption' && this._allowUnknownOption) {
  35. return
  36. }
  37. this.outputHelp()
  38. console.log(` ` + chalk.red(log(...args)))
  39. console.log()
  40. process.exit(1)
  41. }
  42. }
  43. enhanceErrorMessages('missingArgument', argName => {
  44. return `Missing required argument ${chalk.yellow(`<${argName}>`)}.`
  45. })
  46. enhanceErrorMessages('unknownOption', optionName => {
  47. return `Unknown option ${chalk.yellow(optionName)}.`
  48. })
  49. enhanceErrorMessages('optionMissingArgument', (option, flag) => {
  50. return `Missing required argument for option ${chalk.yellow(option.flags)}` + (
  51. flag ? `, got ${chalk.yellow(flag)}` : ``
  52. )
  53. })
  54. program.parse(process.argv)
  55. if (!process.argv.slice(2).length) {
  56. program.outputHelp()
  57. }
  58. function wrapCommand (fn) {
  59. return (...args) => {
  60. return fn(...args).catch(err => {
  61. console.error(chalk.red(err.stack))
  62. })
  63. }
  64. }