Javascript 如何为AWS Lambda nodejs运行时构建单个js文件
我们正在开发一个可以帮助在AWS Lambda中部署和维护代码的工具。我想将lambda函数的所有node.js代码构建/捆绑到一个js文件中,因为:Javascript 如何为AWS Lambda nodejs运行时构建单个js文件,javascript,browserify,webpack,aws-lambda,systemjs,Javascript,Browserify,Webpack,Aws Lambda,Systemjs,我们正在开发一个可以帮助在AWS Lambda中部署和维护代码的工具。我想将lambda函数的所有node.js代码构建/捆绑到一个js文件中,因为: 较小的代码库有助于解决lambda冷启动问题 Lambda的邮政编码大小限制为50MB 我们不想创建一个自定义绑定器来实现这一点,因为已经有很多选项(systemjs、browserify、webpack等)。然而,我们关注的是一些节点模块与绑定器/构建器的关系不好的问题 特别是aws sdkhas,说它有,但我已经和那些浏览aws sdk有
- 较小的代码库有助于解决lambda冷启动问题
- Lambda的邮政编码大小限制为50MB
aws sdk
has,说它有,但我已经和那些浏览aws sdk有问题的人谈过了
我们希望选择一个现有的bundler(或2个),但我们希望确保它能适用于尽可能多的模块/代码。我们正在尝试为JAWS创建一个插件生态系统,因此正确使用插件生态系统是很重要的(不要因为他们使用的模块X不会捆绑而关闭人们)
问题:
可能的答案是使函数的行为类似于引导加载程序。让函数从S3下载打包的代码,解包并运行它
必须按您建议的方式处理代码似乎是个坏主意,可能会导致无法预测和难以调试的错误。我不喜欢使用单一文件解决方案,而是上传压缩了所有代码的zip文件。我用大口喝这个。下面的代码只上载生产依赖项,不包括以前上载的开发依赖项和zip存档。您还可以使用
gulp.src
的参数排除测试文件夹或任何其他文件
请注意,aws sdk
库在我的开发依赖项中,因为aws Lambda已经有一个副本;)
这并不能直接回答您的问题,但该项目可能正是处于这种情况下的人所需要的 它允许您在正常的webpack样式的多文件体系结构中构建项目,然后使用CLI实用程序将项目构建到Lambda优化的文件中 CLI还处理函数初始化、部署和一系列我还不需要的其他函数。它甚至会创建/配置触发器(例如,s3对象创建或通过AWS API服务设置新的REST API) 我只有几个Lambda函数,但在我开始使用
serverless
之前,即使维护这些函数也是一件痛苦的事情
(这是一个奉承的帖子,但要明确的是,我不是该项目的附属机构)现在正式发布了。你可以解释为什么这是一件伟大的事情
我已经创建了一个名为的无服务器插件,它将以最小的配置完成所有繁重的工作
为了具体回答这个问题,我用这个browserify配置解决了这个问题:
{
disable: false, //Not an official option, used as internal option to skip browserify
exclude: [], //Not an option, but will use for setting browserify.exclude() if defined in yml
ignore: [], //Not an option, but will use for setting browserify.ignore() if defined in yml
basedir: this.serverless.config.servicePath,
entries: [],
standalone: 'lambda',
browserField: false, // Setup for node app (copy logic of --node in bin/args.js)
builtins: false,
commondir: false,
ignoreMissing: true, // Do not fail on missing optional dependencies
detectGlobals: true, // We don't care if its slower, we want more mods to work
insertGlobalVars: { // Handle process https://github.com/substack/node-browserify/issues/1277
//__filename: insertGlobals.lets.__filename,
//__dirname: insertGlobals.lets.__dirname,
process: function() {
},
},
debug: false,
}
您可以通过完整的示例查看我的完整代码您是否尝试过使用以下选项进行browserify:“{builtins:false,commondir:false,browserField:false,detectGlobals:false,ignoreMissing:true,}”```
{
disable: false, //Not an official option, used as internal option to skip browserify
exclude: [], //Not an option, but will use for setting browserify.exclude() if defined in yml
ignore: [], //Not an option, but will use for setting browserify.ignore() if defined in yml
basedir: this.serverless.config.servicePath,
entries: [],
standalone: 'lambda',
browserField: false, // Setup for node app (copy logic of --node in bin/args.js)
builtins: false,
commondir: false,
ignoreMissing: true, // Do not fail on missing optional dependencies
detectGlobals: true, // We don't care if its slower, we want more mods to work
insertGlobalVars: { // Handle process https://github.com/substack/node-browserify/issues/1277
//__filename: insertGlobals.lets.__filename,
//__dirname: insertGlobals.lets.__dirname,
process: function() {
},
},
debug: false,
}