@cisdi/pangu
Version:
develop tool for ui-engine project
77 lines (65 loc) • 2.02 kB
JavaScript
const pkg = require('./pkg')
const { isReact, isVue, isVue2 } = require('./framework')
const reactDeps = require('../deps/react')
const vueDeps = require('../deps/vue')
const vue2Deps = require('../deps/vue2')
const { spawnSync } = require('child_process')
const signale = require('signale')
const { dependencies = {}, devDependencies = {} } = pkg
const isExistDeps = (localDeps, requireDeps) => {
const depsArr = Object.keys(requireDeps)
if (!depsArr.length) {
return true
}
const fullInstalled = Object.keys(requireDeps).every((dep) => localDeps[dep])
return fullInstalled
}
const installDeps = (deps, dev) => {
const depsArr = Object.keys(deps).map((dep) => {
const version = deps[dep]
return [dep, version].join('@')
})
if (depsArr.length) {
if (depsArr.length) {
const isWin32 = process.platform === 'win32'
const cmd = isWin32 ? 'npm.cmd' : 'npm'
const save = dev ? '--save-dev' : '--save'
const subProcess = spawnSync(cmd, ['install', save, ...depsArr], {
stdio: 'ignore',
encoding: 'utf-8',
})
if (subProcess.status === 1) {
signale.error('Required dependencies install failed')
signale.info(depsArr.join(' '))
process.exit(0)
}
}
}
}
const checkDeps = () => {
signale.await('Check required deps')
let deps
if (isReact) {
deps = reactDeps
} else if (isVue) {
deps = vueDeps
} else if (isVue2) {
deps = vue2Deps
}
if (deps) {
const depsFullInstalled = isExistDeps(dependencies, deps.deps)
const devDepsFullInstalled = isExistDeps(devDependencies, deps.devDeps)
if (!devDepsFullInstalled) {
signale.await('Install development dependencies')
installDeps(deps.devDeps, true)
}
if (!depsFullInstalled) {
signale.await('Install dependencies')
installDeps(deps.deps, false)
}
if (!depsFullInstalled || !devDependencies) {
signale.success('Dependencies install finish')
}
}
}
module.exports = checkDeps