我使用imangemin和imagemin-optipng nodejs插件在aws上创建了一个lambda函数,但它在出现以下错误时返回我:
错误:产生/ var / task / node_modules / optipng-bin / vendor / optipng ENOENT
var aws = require('aws-sdk');
var s3 = new aws.S3()
var Imagemin = require('imagemin');
var optipng = require('imagemin-optipng');
exports.handler = function(event, context, callback){
var srcBucket = event.Records[0].s3.bucket.name;
var srcKey =
decodeURIComponent(event.Records[0].s3.object.key.replace(/\+/g, " "));
var params = {Bucket: srcBucket, Key: srcKey};
s3.getObject(params).promise()
.then(data => Imagemin.buffer(data.Body, {
plugins: [
optipng({ optimizationLevel: 7 })
]
})
)
.then(buffer =>
console.log('done ', buffer)
)
.catch(err => callback(err))
};
答案 0 :(得分:1)
我昨天刚刚在 AWS Lambda 上遇到了类似的问题。如果有人也面临这个问题,并且开发环境是 Windows,那么我相信这是适合您的解决方案。 (请注意,在我的示例中,我使用无服务器框架进行构建和部署,但是,无论是否使用无服务器,该原则都应该有效)
我尝试了几种不同的解决方案,但最简单、最快的解决方案是安装 Windows Subsystem for Linux 并从 Windows 上的 Ubuntu 终端运行无服务器部署。
问题在于某些软件包依赖于操作系统,这意味着安装在不同操作系统上的相同软件包将产生不同的安装。因此,您的本地构建/运行工作正常,因为您在 Windows 环境中安装了软件包并且您在 Windows 环境中运行了软件包代码,但是,当您部署到 AWS 时现在在 Amazon Linux 上运行,并且您的依赖于操作系统的包(如 mozjpeg、jpegtran 等) 将在运行期间失败。所以你最好的办法是安装软件包,构建和从 Linux 环境部署你的项目(不确定是否所有 Linux 发行版都适合这个声明,但 Ubuntu 肯定适合).
这是我所做工作的时间表:
<块引用>就是这样。 我花了大约 20 分钟来执行这个解决方案,而其他解决方案,即使一些有效(如 CodeBuild),更令人困惑,因此更耗时。
答案 1 :(得分:0)
尝试重新安装optipng-bin模块。或node ./node_modules/optipng-bin/lib/install.js