skypager-project-types-electron-app
Version:
skypager electron app project type
85 lines (67 loc) • 2.41 kB
JavaScript
import isEmpty from 'lodash/isEmpty'
import omit from 'lodash/pick'
export function configure(program) {
return program
.command('electron:init')
.description('initialize a new electron app project')
}
export function execute(options = {}, context = {}) {
const { project } = context
initializeElectronProject(project, options).then(() => {
project.cli.print('Finished!')
})
}
export async function initializeElectronProject(project, options) {
const { print, clear, randomBanner } = project.cli
clear()
await randomBanner('Skypager')
await prepareProjectDirectory(project, options)
await installDependencies(project, options)
}
async function prepareProjectDirectory(project, options = {}) {
const { print } = project.cli
const appFolderExists = await project.existsAsync(project.resolve('app'))
const manifestExists = await project.existsAsync(project.resolve('app'))
print(`Preparing App Folder`)
if (!appFolderExists) {
await project.mkdirpAsync(project.resolve('app'))
}
print(`Preparing App Manifest`)
if (!manifestExists) {
const templateJson = require('../../templates/production.package.json')
await project.writeFileAsync(
project.resolve('app', 'package.json'),
JSON.stringify(templateJson, null, 2),
'utf8'
)
}
}
async function installDependencies(project, options = {}) {
const { print, spinner: Spinner } = project.cli
print('Performing dependencies check')
const { devDependencies } = require('../../templates/dev-dependencies.json')
const manifest = project.manifest
const existingDevDependencies = project.get('manifest.devDependencies', {})
const missingDevDependencies = omit(existingDevDependencies, Object.keys(devDependencies))
if (!isEmpty(missingDevDependencies)) {
print('You are missing the following devDependencies:', 4)
print(Object.keys(missingDevDependencies), 6)
print('We have gone ahead and added them for you')
const updates = Object.assign({}, manifest, {
devDependencies: {
...manifest.devDependencies || {},
...devDependencies,
}
})
await project.writeFileAsync(
project.paths.manifest,
JSON.stringify(updates, null, 2),
'utf8'
)
require('child_process').execSync('npm install', {
cwd: project.cwd,
stdio: 'inherit'
})
print('Finished')
}
}