s3-npm-cache
Version:
Lightweight runtime to cache NPM dependencies in S3
48 lines (38 loc) • 1.37 kB
JavaScript
/*
S3 NPM Cache
*/
var md5 = require('md5-file'),
path = require('path'),
fs = require('fs'),
process = require('./lib/process'),
misc = require('./lib/misc'),
os = require('os'),
s3 = require('./lib/s3');
var init = function (s3BucketName, packageJsonFileLocation) {
var packageJsonFile = packageJsonFileLocation + '/package.json',
nodeModulesFolder = packageJsonFileLocation + '/node_modules',
s3PackageName = md5.sync(packageJsonFile) + "-" + os.platform() + "-" + os.arch() + ".tar.gz";
process.setProcessMetadata({
packageJsonFileLocation: packageJsonFileLocation,
packageJsonFile: packageJsonFile,
nodeModulesFolder: nodeModulesFolder,
s3PackageName: s3PackageName
});
if (misc.checkFileExists(nodeModulesFolder)) {
console.log('Node modules already installed. Continuing...');
return;
}
if (!s3.checkCredentials()) {
console.warn('AWS credentials not found. Npm installing...');
process.npmAction('install');
return;
}
console.log('Attempting to retrieve ZIP file from S3 -', path.join(s3BucketName, s3PackageName));
s3.setS3BucketName(s3BucketName);
s3.getFileFromS3(s3PackageName)
.then(process.unzipNodeModules)
.catch(process.uploadNewFile);
};
module.exports = {
init: init
};