ali322
3/13/2017 - 2:16 AM

run.js

#! /usr/bin/env node

let fs = require('fs-extra')
let path = require('path')
let inquirer = require("inquirer")
let _ = require('lodash')
let execSync = require("child_process").execSync

inquirer.prompt([{
    type: 'input',
    name: 'version',
    message: 'type package version'
}]).then(function(answers) {
    updateAndPublishPkg(answers.version)
    updateAndPublishRoot(answers.version)
})

let packages = ['nva-core', 'nva-server', 'nva-task']

function updateAndPublishRoot(version) {
    let file = path.join(__dirname, '..', 'package.json')
    let updated = fs.readJSONSync(file)
    updated['version'] = version
    updated['dependencies'] = _.mapValues(updated['dependencies'], function(d, k) {
        if (packages.indexOf(k) > -1) {
            return '^' + version
        }
        return d
    })
    fs.writeJSONSync(file, updated)
    file = path.dirname(file)
    try {
        execSync(`cd ${file} && npm publish`, { stdio: 'inherit' })
    } catch (err) {
        console.log(err)
        process.exit(1)
    }
}

function updateAndPublishPkg(version) {
    let files = packages.map(function(v) {
        return path.join(__dirname, '..', 'packages', v, 'package.json')
    })
    let updated = files.map(function(v) {
        return fs.readJSONSync(v)
    }).map(function(v) {
        v['version'] = version
        v['dependencies'] = _.mapValues(v['dependencies'], function(d, k) {
            if (packages.indexOf(k) > -1) {
                return '^' + version
            }
            return d
        })
        return v
    })

    files.forEach(function(v, k) {
        fs.writeJSONSync(v, updated[k])
        v = path.dirname(v)
        try {
            execSync(`cd ${v} && npm publish`, { stdio: 'inherit' })
        } catch (err) {
            console.log(err)
            process.exit(1)
        }
    })

}