aws lambda nodejs - 上传由 GULP 压缩的 zip 文件时出错
aws lambda nodejs - error when uploading a zip file compressing by GULP
我正在使用 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 文件夹中,有一个包含 lodash 库的 node_modules 目录。
dist.zip
|---node_modules
|--- lodash
|---index.js
当我手动压缩 node_modules 目录和文件 index.js 时,它工作正常。
有谁知道错在哪里?也许在使用 Gulp 压缩时,lib 路径配置错误?
包 gulp-zip 非常受欢迎(每天 4.3k 次下载)并且似乎没有任何 Gulp 替代品。问题肯定出在相对路径以及 gulp-zip 如何处理它们。 即使在 gulp.src 函数中使用基本路径选项(下面的示例),gulp-zip 也会找到一种方法来搞砸它。
gulp.task("default", ["build-pre-zip"], function () {
return gulp.src([
"dist/**/*"
], { base: "dist/" })
.pipe(debug())
.pipe(zip("dist.zip"))
.pipe(gulp.dest("./dist/"));
});
由于截至 2017 年 1 月 4 日没有好的 Gulp 解决方案,我建议采用解决方法。 我使用 Gulp 来填充dist 文件夹,正是我需要它的正确 node_modules 文件夹。然后是时候使用存储的相对文件路径正确压缩 dist 文件夹了。为此,我还更新了 Lambda,我使用命令行选项的批处理文件 (Windows) 来完成工作。这是我创建的用来代替 gulp-zip 任务的 upload.bat 文件:
start /wait cmd /c "gulp default"
start /wait cmd /c "C:\Program Files\WinRAR\WinRAR.exe" a -r -ep1 dist\dist.zip dist\*.*
aws lambda update-function-code --zip-file fileb://dist/dist.zip --function-name your-fn-name-here
如果您使用 WinRAR,您将 find their command line docs here, for WinZip go here. That .bat file assumes you are using the AWS Command Line Interface (CLI) which is a godsend; get it here.
如果您希望此答案将您指向 100% Gulp 解决方案,我会说,"You and me both!"。祝你好运。
几天前我遇到了同样的问题。
每个人都指向 gulp zip,但是 gulp zip 没有问题。
以下工作正常:
gulp
.src(['sourceDir/**'], {nodir: true, dot: true} )
.pipe(zip('target.zip'))
.pipe(gulp.dest('build/'));
也就是说,注意下面,在 src 的第二个参数中,在上面:
{nodir: true, dot: true}
也就是说,我们必须在 zip 中包含点文件(例如:.config、.abc 等)
因此,请将以上内容包含在 gulp 的 .src 中,否则所有其他内容(如 copy、zip 等)将不正确。
我正在使用 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 文件夹中,有一个包含 lodash 库的 node_modules 目录。
dist.zip
|---node_modules
|--- lodash
|---index.js
当我手动压缩 node_modules 目录和文件 index.js 时,它工作正常。
有谁知道错在哪里?也许在使用 Gulp 压缩时,lib 路径配置错误?
包 gulp-zip 非常受欢迎(每天 4.3k 次下载)并且似乎没有任何 Gulp 替代品。问题肯定出在相对路径以及 gulp-zip 如何处理它们。 即使在 gulp.src 函数中使用基本路径选项(下面的示例),gulp-zip 也会找到一种方法来搞砸它。
gulp.task("default", ["build-pre-zip"], function () {
return gulp.src([
"dist/**/*"
], { base: "dist/" })
.pipe(debug())
.pipe(zip("dist.zip"))
.pipe(gulp.dest("./dist/"));
});
由于截至 2017 年 1 月 4 日没有好的 Gulp 解决方案,我建议采用解决方法。 我使用 Gulp 来填充dist 文件夹,正是我需要它的正确 node_modules 文件夹。然后是时候使用存储的相对文件路径正确压缩 dist 文件夹了。为此,我还更新了 Lambda,我使用命令行选项的批处理文件 (Windows) 来完成工作。这是我创建的用来代替 gulp-zip 任务的 upload.bat 文件:
start /wait cmd /c "gulp default"
start /wait cmd /c "C:\Program Files\WinRAR\WinRAR.exe" a -r -ep1 dist\dist.zip dist\*.*
aws lambda update-function-code --zip-file fileb://dist/dist.zip --function-name your-fn-name-here
如果您使用 WinRAR,您将 find their command line docs here, for WinZip go here. That .bat file assumes you are using the AWS Command Line Interface (CLI) which is a godsend; get it here.
如果您希望此答案将您指向 100% Gulp 解决方案,我会说,"You and me both!"。祝你好运。
几天前我遇到了同样的问题。
每个人都指向 gulp zip,但是 gulp zip 没有问题。
以下工作正常:
gulp
.src(['sourceDir/**'], {nodir: true, dot: true} )
.pipe(zip('target.zip'))
.pipe(gulp.dest('build/'));
也就是说,注意下面,在 src 的第二个参数中,在上面:
{nodir: true, dot: true}
也就是说,我们必须在 zip 中包含点文件(例如:.config、.abc 等)
因此,请将以上内容包含在 gulp 的 .src 中,否则所有其他内容(如 copy、zip 等)将不正确。