【发布时间】:2017-03-07 00:25:53
【问题描述】:
我正在使用 Gulp 压缩一个 zip 文件,然后将其上传到 AWS Lambda。上传 zip 文件是手动完成的。 Gulp 只处理压缩过程。
这是我的 gulpfile.js
var gulp = require('gulp');
var zip = require('gulp-zip');
var del = require('del');
var install = require('gulp-install');
var runSequence = require('run-sequence');
var awsLambda = require("node-aws-lambda");
gulp.task('clean', function() {
return del(['./dist', './dist.zip']);
});
gulp.task('js', function() {
return gulp.src('index.js')
.pipe(gulp.dest('dist/'));
});
gulp.task('npm', function() {
return gulp.src('./package.json')
.pipe(gulp.dest('dist/'))
.pipe(install({production: true}));
});
gulp.task('zip', function() {
return gulp.src(['dist/**/*', '!dist/package.json'])
.pipe(zip('dist.zip'))
.pipe(gulp.dest('./'));
});
gulp.task('deploy', function(callback) {
return runSequence(
['clean'],
['js', 'npm'],
['zip'],
callback
);
});
运行部署任务后,会创建一个名为 dist.zip 的 zip 文件夹,其中包含一个 index.js 文件和一个 node_modules 文件夹。 node_modules 文件夹只包含一个 lodash 库。
这是 index.js
var _ = require('lodash');
console.log('Loading function');
exports.handler = (event, context, callback) => {
//console.log('Received event:', JSON.stringify(event, null, 2));
var b = _.chunk(['a', 'b', 'c', 'd', 'e'], 3);
console.log(b);
callback(null, event.key1); // Echo back the first key value
//callback('Something went wrong');
};
使用 AWS lambda 控制台上传 dist.zip 文件夹后。有错误提示找不到lodash库
{
"errorMessage": "Cannot find module 'lodash'",
"errorType": "Error",
"stackTrace": [
"Function.Module._load (module.js:276:25)",
"Module.require (module.js:353:17)",
"require (internal/module.js:12:17)",
"Object.<anonymous> (/var/task/index.js:1:71)",
"Module._compile (module.js:409:26)",
"Object.Module._extensions..js (module.js:416:10)",
"Module.load (module.js:343:32)",
"Function.Module._load (module.js:300:12)",
"Module.require (module.js:353:17)"
]
}
但在 zip 文件夹中,有一个 node_modules 目录,其中包含 lodash 库。
dist.zip
|---node_modules
|--- lodash
|---index.js
当我手动压缩 node_modules 目录和文件 index.js 时,它工作正常。
有谁知道错在哪里?也许在使用 Gulp 压缩时,lib 路径配置错误?
【问题讨论】:
-
FWIW,我在这里寻求完全相同问题的答案。来自 gulp-zip 的 zip 文件在某种程度上很糟糕。我的怀疑是它如何存储相对文件路径。我的本地 zip 工具 (WinRar) 默认存储相对文件路径,如果我手动上传它,它运行良好。如果我让 gulp-zip 构建 zip 文件,然后使用 CLI 上传(aws lambda update-function-code --zip-file),那么它会如您所说的那样出错。到目前为止还没有答案,但我们可能正在寻找不同的 gulp-zip。
标签: gulp aws-lambda