如何为AWS Lambda nodejs运行时构建单个js文件

ryn*_*nop 18 javascript browserify systemjs webpack aws-lambda

我们正在开发一个有助于在AWS Lambda中部署和维护代码的项目/框架.我想构建/捆绑lambda函数的所有node.js代码到一个js文件中,因为:

  • 较小的代码库有助于lambda冷启动问题
  • Lambda的代码zip大小限制为50MB

我们不想创建自定义捆绑器来执行此操作,因为已经存在许多选项(systemjs,browserify,webpack等).然而,我们担心某些节点模块与捆绑器/构建器不兼容的问题.

特别aws-sdkwebpack存在已知问题,说它有浏览器支持,但我已经和浏览过aws-sdk问题的人交谈了

我们想选择一个现有的捆绑器(或2),但我们希望确保它适用于尽可能多的模块/代码.我们正在尝试为JAWS创建一个插件生态系统,所以要做到这一点非常重要(不要因为模块X使用它们而不能捆绑人员).

问题:

  1. 我如何进行捆绑/构建以满足这些约束?
  2. 我们可以向产品的消费者提供任何指导方针,以确保他们编写/使用的代码能够捆绑吗?例如:动态require()导致问题AFAIK.

ryn*_*nop 1

aws-sdk-js现在正式支持 browserify您可以在我的博客上了解为什么这是一件很棒的事情。

我创建了一个名为serverless-plugin-browserify 的无服务器插件,它将以最少的配置完成所有繁重的工作。

为了具体回答这个问题,我用这个 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,
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看我的完整代码以及完整的示例