UNPKG

s3-npm-cache

Version:

Lightweight runtime to cache NPM dependencies in S3

75 lines (62 loc) 2.03 kB
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 };