|
|
const inquirer = require('inquirer')
|
|
|
const semver = require('semver')
|
|
|
const package = require('../package.json')
|
|
|
const util = require('util')
|
|
|
const exec = util.promisify(require('child_process').exec)
|
|
|
async function publish() {
|
|
|
const config = await inquirer.prompt([
|
|
|
{
|
|
|
type: 'list',
|
|
|
name: 'version',
|
|
|
message: '请选择本次发布的版本类型:',
|
|
|
choices: ['Prerelease', 'Patch', 'Minor', 'Major'],
|
|
|
filter: function(val) {
|
|
|
return val.toLowerCase()
|
|
|
}
|
|
|
},
|
|
|
{
|
|
|
type: 'confirm',
|
|
|
name: 'isLatest',
|
|
|
message: '是正式版发布吗?',
|
|
|
default: false
|
|
|
}
|
|
|
])
|
|
|
|
|
|
if (config.isLatest && config.version === 'prerelease') {
|
|
|
console.log('PreRelease版本不能发布正式版!')
|
|
|
return
|
|
|
}
|
|
|
|
|
|
if (!config.isLatest && config.version !== 'prerelease') {
|
|
|
config.version = 'pre' + config.version
|
|
|
}
|
|
|
|
|
|
let newVersion = semver.inc(package.version, config.version)
|
|
|
|
|
|
const publishCommand = 'npm publish' + (config.isLatest ? '' : ' --tag beta')
|
|
|
|
|
|
const confirmMessage = `请确认核对信息:
|
|
|
==========发布信息==========
|
|
|
当前版本:${package.version}
|
|
|
发布版本:${newVersion}
|
|
|
执行命令:npm version ${newVersion} && ${publishCommand}
|
|
|
==========发布信息==========
|
|
|
以上信息确认无误?`
|
|
|
const confirm = await inquirer.prompt([
|
|
|
{
|
|
|
type: 'confirm',
|
|
|
name: 'result',
|
|
|
message: confirmMessage,
|
|
|
default: false
|
|
|
}
|
|
|
])
|
|
|
|
|
|
if (confirm.result) {
|
|
|
console.log('发布中...')
|
|
|
const { stdout, stderr } = await exec(
|
|
|
`npm version ${newVersion} && ${publishCommand}`
|
|
|
)
|
|
|
console.log('stdout:', stdout)
|
|
|
console.log('stderr:', stderr)
|
|
|
console.log('发布成功!')
|
|
|
}
|
|
|
}
|
|
|
publish()
|