无法在AWS Lambdas中使用任何第三方模块

我正在使用一个lambda使用模块(asynchronous,请求等)

Unable to import module 'index': Error at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at Object.<anonymous> (/var/task/index.js:1:63) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) 

示例代码:

 var AWS = require('aws-sdk'), util = require('util'), request = require('request'); exports.handler = function(event, context) { console.log('test'); context.done(); }; 

它工作正常(打印testing),只要没有第三方模块(除了aws-sdk)是必需的。 只要我添加一行如:

 require('request') // or async, config and so on 

它与上述错误失败。 我已经尝试直接调用这些模块,通过指定完整的path,没有运气。 这就像调用require时查看错误的目录一样。

在控制台中dump process.env产生:

 PATH: '/usr/local/bin:/usr/bin:/bin', LAMBDA_TASK_ROOT: '/var/task', LAMBDA_RUNTIME_DIR: '/var/runtime', AWS_REGION: 'us-west-2', AWS_DEFAULT_REGION: 'us-west-2', AWS_LAMBDA_LOG_GROUP_NAME: '/aws/lambda/Thumbnailer', AWS_LAMBDA_LOG_STREAM_NAME: '2015/12/10/[$LATEST]3f8ef236195448c88f206634bde6301b', AWS_LAMBDA_FUNCTION_NAME: 'Thumbnailer', AWS_LAMBDA_FUNCTION_MEMORY_SIZE: '512', AWS_LAMBDA_FUNCTION_VERSION: '$LATEST', NODE_PATH: '/var/runtime:/var/task:/var/runtime/node_modules', 

这是我正在工作的模块 – 显然这曾经在某些时候工作,但不适合我。

想法? 我觉得我错过了这里lambdas独特的一些configuration。

omg是痛苦的…原来,OSX使得node_modules文件夹只能被用户读取,AWS不能读取它。 使node_modules文件夹和内容可读的世界,它的工作原理。 我不确定是否所有的OSX设置都一样。 我使用nvm可能是罪魁祸首。

更新 。 我曾经将所有文件设置为0666但遇到可执行文件的问题。 这是一个能够正确解决问题的小脚本。 它将设置所有文件为0666除非可执行文件或目录在这种情况下0777 。 从项目文件夹中运行它(注意不要这样做):

以下是我发布的问题的脚本:

 #!/bin/bash find . \ '(' -perm -0700 -exec chmod 0777 '{}' + ')' -o \ '(' -perm -0600 -exec chmod 0666 '{}' + ')'