我们正在开发一个project/framework,它有助于在AWS Lambda中部署和维护代码。我想将lambda函数的所有node.js代码构建/捆绑到一个js文件中,因为:
我们不想创建自定义捆绑器来执行此操作,因为已经存在许多选项(systemjs,browserify,webpack等)。然而,我们担心某些节点模块与捆绑器/构建器不兼容的问题。
具体而言,aws-sdk
有known issues with webpack,说它有browserify support,但我已经与那些浏览过aws-sdk问题的人谈过了
我们想选择一个现有的bundler(或2),但我们希望确保它适用于尽可能多的模块/代码。我们正在尝试为JAWS创建一个插件生态系统,所以正确地做到这一点非常重要(不要因为他们使用的模块X不捆绑而关闭人员)。
问题:
答案 0 :(得分:2)
我不想使用单个文件解决方案,而是上传包含所有代码的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('.'));
});
答案 1 :(得分:2)
这不会直接回答您的问题,但serverless项目可能正是这种情况下需要的人。
它允许您使用普通的webpack样式的多文件体系结构构建项目,然后使用CLI实用程序将项目构建为Lambda优化的文件。
CLI还处理函数初始化,部署以及一些我甚至还不需要的其他函数。它甚至可以创建/配置您的触发器(例如,创建s3对象或通过AWS API服务设置新的REST API)。
我只有一些Lambda函数,但在我开始使用serverless
之前,即使维护这些函数也很痛苦。
(这是一个令人讨厌的帖子,但要明确我与项目没有关系)
答案 2 :(得分:1)
aws-sdk-js现已正式supports browserify。你可以为什么这是一件好事on my blog。
我已经创建了一个名为serverless-plugin-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,
}
您可以使用完整示例here
查看完整代码here答案 3 :(得分:0)
可能的答案可能是使该函数的行为类似于引导加载程序。使该函数从S3下载打包的代码,解压缩并运行它。
以你提出的方式触摸代码似乎是个坏主意,可能导致不可预测且难以调试的错误。