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

标签 javascript browserify webpack aws-lambda systemjs

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

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

  • 我们不想创建自定义捆绑器来执行此操作,因为已经有很多选项(systemjs、browserify、webpack 等)。然而,我们担心一些节点模块不能很好地与捆绑器/构建器一起使用的问题。

    具体aws-sdkknown issues with webpack , 说它有 browserify support但我已经和那些对浏览器化 aws-sdk 有问题的人谈过

    我们想选择一个现有的捆绑器(或 2 个),但我们想确保它适用于尽可能多的模块/代码。我们正在尝试为 JAWS 创建一个插件生态系统,因此正确处理这一点很重要(不想让人们关闭,因为他们使用的模块 X 不会捆绑)。

    问题:
  • 我将如何进行捆绑/构建以满足这些限制?
  • 我们是否可以为产品的消费者提供任何指导,以确保他们编写/使用的代码能够捆绑在一起?例如:动态 require()s 导致问题 AFAIK。
  • 最佳答案

    我不喜欢使用单文件解决方案,而是上传打包了所有代码的 zip 文件。我为此使用 gulp。以下代码仅上传生产依赖项,不包括开发依赖项和之前上传的 zip 存档。您也可以使用 gulp.src 的参数排除您的测试文件夹或任何其他文件.

    顺便提一下,aws-sdk库在我的开发依赖项中,因为 AWS Lambda 已经有一个副本;)

    var gulp = require('gulp');
    var lambda = require('gulp-awslambda');
    var zip = require('gulp-zip');
    var settings = require('./settings');
    var argv = require('yargs').argv;
    var p = require('./package.json');
    
    gulp.task('default', function () {
        var profile = argv.profile;
        var src = ['**', '!*.zip', '!node_modules/aws-sdk{,/**}'];
        var i;
        for (i in p.devDependencies) {
            src.push("!node_modules/" + i + "{,/**}");
        }
        if (!profile) {
            profile = settings.aws.defaultProfile;
        }
        return gulp.src(src)
            .pipe(zip('archive.zip'))
            .pipe(lambda(settings.aws.lambda, {
                region: settings.aws.region,
                profile: profile
            }))
            .pipe(gulp.dest('.'));
    });
    

    关于javascript - 如何为 AWS Lambda nodejs 运行时构建单个 js 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32253362/

    相关文章:

    Javascript - Jquery .load() 和 setInterval() 问题

    javascript - MYSQL - PHP - 使用从提交按钮传递的变量更新数据库中的值

    javascript - 处理 angularjs 测试中的依赖关系

    reactjs - 如何编写用于退出 JavaScript 的 Typescript 定义文件

    javascript - React-Typescript Hello World

    javascript - 自动调整 Kendo-Grid 高度

    javascript - 如何使用 window.scroll 在页面加载时自动滚动?

    javascript - Browserify 导入/要求?

    javascript - 如何访问在 browserify 脚本中声明的变量

    css - 从 JSON 文件或 typescript 文件定义 CSS 变量的方法?