help.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const chalk = require('chalk')
  2. const padEnd = require('string.prototype.padend')
  3. const getPadLength = require('../util/getPadLength')
  4. module.exports = (api, options) => {
  5. api.registerCommand('help', args => {
  6. const command = args._[0]
  7. if (!command) {
  8. logMainHelp()
  9. } else {
  10. logHelpForCommand(command, api.service.commands[command])
  11. }
  12. })
  13. function logMainHelp () {
  14. console.log(
  15. `\n Usage: vue-cli-service <command> [options]\n` +
  16. `\n Commands:\n`
  17. )
  18. const commands = api.service.commands
  19. const padLength = getPadLength(commands)
  20. for (const name in commands) {
  21. if (name !== 'help') {
  22. const opts = commands[name].opts || {}
  23. console.log(` ${
  24. chalk.blue(padEnd(name, padLength))
  25. }${
  26. opts.description || ''
  27. }`)
  28. }
  29. }
  30. console.log(`\n run ${
  31. chalk.green(`vue-cli-service help [command]`)
  32. } for usage of a specific command.\n`)
  33. }
  34. function logHelpForCommand (name, command) {
  35. if (!command) {
  36. console.log(chalk.red(`\n command "${name}" does not exist.`))
  37. } else {
  38. const opts = command.opts || {}
  39. if (opts.usage) {
  40. console.log(`\n Usage: ${opts.usage}`)
  41. }
  42. if (opts.options) {
  43. console.log(`\n Options:\n`)
  44. const padLength = getPadLength(opts.options)
  45. for (const name in opts.options) {
  46. console.log(` ${
  47. chalk.blue(padEnd(name, padLength))
  48. }${
  49. opts.options[name]
  50. }`)
  51. }
  52. }
  53. if (opts.details) {
  54. console.log()
  55. console.log(opts.details.split('\n').map(line => ` ${line}`).join('\n'))
  56. }
  57. console.log()
  58. }
  59. }
  60. }