diff --git a/lib/main.js b/lib/main.js index 27672f69..15b92e0b 100644 --- a/lib/main.js +++ b/lib/main.js @@ -2,6 +2,7 @@ var aws = require('aws-sdk'); var exec = require('child_process').exec; +var execSync = require('child_process').execSync; var fs = require('fs-extra'); var os = require('os'); var packageJson = require('./../package.json'); @@ -10,6 +11,7 @@ var async = require('async'); var zip = new require('node-zip')(); var dotenv = require('dotenv'); + var Lambda = function () { this.version = packageJson.version; @@ -366,13 +368,26 @@ Lambda.prototype._archivePrebuilt = function (program, archive_callback) { _this._setEnvironmentVars(program, codeDirectory); } console.log('=> Zipping deployment package'); - var archive = process.platform !== 'win32' ? _this._nativeZip : _this._zip; - archive = archive.bind(_this); + var archive = _this._whichZipProgram(); + archive = archive.bind(_this); archive(program, codeDirectory, archive_callback); }); }; +Lambda.prototype._whichZipProgram = function() { + if (process.platform === 'win32') return this._zip; + + // Test if the "zip" command exists. + try { + execSync('command -v zip 2>/dev/null'); + } catch (err) { + return this._zip; + } + + return this._nativeZip; +} + Lambda.prototype._buildAndArchive = function (program, archive_callback) { this._createSampleFile('.env', '.env'); @@ -414,7 +429,7 @@ Lambda.prototype._buildAndArchive = function (program, archive_callback) { } console.log('=> Zipping deployment package'); - var archive = process.platform !== 'win32' ? _this._nativeZip : _this._zip; + var archive = _this._whichZipProgram(); archive = archive.bind(_this); archive(program, codeDirectory, archive_callback);