s3-npm-cache
Version:
Lightweight runtime to cache NPM dependencies in S3
75 lines (62 loc) • 2.03 kB
JavaScript
var s3 = require('./s3'),
archive = require('./archive'),
shell = require('shelljs'),
fs = require('fs'),
misc = require('./misc');
var pm = {};
var setProcessMetadata = function (metadata) {
pm = metadata;
};
var npmAction = function (action) {
shell.exec('cd ' + pm.packageJsonFileLocation + ' && npm ' + action);
};
var cleanup = function () {
if (fs.existsSync(pm.s3PackageName)) {
fs.unlinkSync(pm.s3PackageName);
}
};
var unzipNodeModules = function (fileName) {
console.log('Downloaded ZIP file from S3. Unzipping...');
archive.unzip(fileName, pm.packageJsonFileLocation)
.then(function () {
console.log('NPM rebuilding...');
npmAction('rebuild');
console.log('Done!');
})
.catch(function (err) {
console.error('Error unzipping', err);
})
.finally(cleanup);
};
var uploadNewFile = function (err) {
if (err.code !== 'NoSuchKey') {
console.warn('Error occurred attempting connection to S3', err);
console.log('Npm installing...');
npmAction('install');
return;
}
console.log(pm.s3PackageName, 'not found . Npm installing...');
npmAction('install');
console.log('Node modules installed. Zipping...');
archive.createZip(pm.nodeModulesFolder, pm.s3PackageName)
.then(function () {
console.log('Zip created. Uploading...');
s3.uploadFileToS3(pm.s3PackageName)
.then(function () {
console.log('Done!')
})
.catch(function (err) {
console.error('Failed to upload file :' + err);
})
.fin(cleanup);
})
.catch(function (err) {
console.error('Error creating zip', err);
});
};
module.exports = {
unzipNodeModules: unzipNodeModules,
uploadNewFile: uploadNewFile,
setProcessMetadata: setProcessMetadata,
npmAction: npmAction
};