Ghost/core/server/services/apps/dependencies.js

52 lines
1.5 KiB
JavaScript
Raw Normal View History

var _ = require('lodash'),
fs = require('fs-extra'),
path = require('path'),
Promise = require('bluebird'),
spawn = require('child_process').spawn,
win32 = process.platform === 'win32';
function AppDependencies(appPath) {
this.appPath = appPath;
}
AppDependencies.prototype.install = function installAppDependencies() {
var spawnOpts,
self = this;
return new Promise(function (resolve, reject) {
fs.stat(path.join(self.appPath, 'package.json'), function (err) {
if (err) {
// File doesn't exist - nothing to do, resolve right away?
resolve();
} else {
// Run npm install in the app directory
spawnOpts = {
cwd: self.appPath
};
self.spawnCommand('npm', ['install', '--production'], spawnOpts)
.on('error', reject)
.on('exit', function (err) {
if (err) {
reject(err);
}
resolve();
});
}
});
});
};
// Normalize a command across OS and spawn it; taken from yeoman/generator
AppDependencies.prototype.spawnCommand = function (command, args, opt) {
var winCommand = win32 ? 'cmd' : command,
winArgs = win32 ? ['/c'].concat(command, args) : args;
opt = opt || {};
return spawn(winCommand, winArgs, _.defaults({stdio: 'inherit'}, opt));
};
module.exports = AppDependencies;