publish.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const inquirer = require('inquirer')
  2. const semver = require('semver')
  3. const package = require('../package.json')
  4. const util = require('util')
  5. const exec = util.promisify(require('child_process').exec)
  6. async function publish() {
  7. const config = await inquirer.prompt([
  8. {
  9. type: 'list',
  10. name: 'version',
  11. message: '请选择本次发布的版本类型:',
  12. choices: ['Prerelease', 'Patch', 'Minor', 'Major'],
  13. filter: function(val) {
  14. return val.toLowerCase()
  15. }
  16. },
  17. {
  18. type: 'confirm',
  19. name: 'isLatest',
  20. message: '是正式版发布吗?',
  21. default: false
  22. }
  23. ])
  24. if (config.isLatest && config.version === 'prerelease') {
  25. console.log('PreRelease版本不能发布正式版!')
  26. return
  27. }
  28. if (!config.isLatest && config.version !== 'prerelease') {
  29. config.version = 'pre' + config.version
  30. }
  31. let newVersion = semver.inc(package.version, config.version)
  32. const publishCommand = 'npm publish' + (config.isLatest ? '' : ' --tag beta')
  33. const confirmMessage = `请确认核对信息:
  34. ==========发布信息==========
  35. 当前版本:${package.version}
  36. 发布版本:${newVersion}
  37. 执行命令:npm version ${newVersion} && ${publishCommand}
  38. ==========发布信息==========
  39. 以上信息确认无误?`
  40. const confirm = await inquirer.prompt([
  41. {
  42. type: 'confirm',
  43. name: 'result',
  44. message: confirmMessage,
  45. default: false
  46. }
  47. ])
  48. if (confirm.result) {
  49. console.log('发布中...')
  50. const { stdout, stderr } = await exec(
  51. `npm version ${newVersion} && ${publishCommand}`
  52. )
  53. console.log('stdout:', stdout)
  54. console.log('stderr:', stderr)
  55. console.log('发布成功!')
  56. }
  57. }
  58. publish()