我创建了一个只有两个文件的非常基本的 NPM 包
index.js:
module.exports = {
errors: {
HttpError: require('./src/errors').HttpError,
test: 'value'
}
}
src/errors.js:
class HttpError extends Error {
constructor (message, code) {
super(message)
this.statusCode = code
if (Error.captureStackTrace) {
Error.captureStackTrace(this, HttpError)
}
}
}
exports.HttpError = HttpError
当我安装这个包时,我可以毫无问题地使用我的错误类。但是,当我使用无服务器创建部署包并尝试将代码作为 AWS Lambda 的一部分运行时,lambda 似乎无法解析 HttpError 类。
在我在 AWS 上运行的 lambda 函数中,当我将包作为 const 请求并将其注销时,日志如下所示:
{"errors":{"test":"value"}}
而在本地它看起来像:
{ errors:
{ HttpError: [Function: HttpError],
test: 'value' } }
我已经从 AWS 下载了部署包,可以确认它看起来和本地版本一模一样。我在 lambda 文档中找不到任何暗示我不能对 javascript 模块使用 require 的内容。我做错了什么?
最佳答案
我发现了错误,这完全是我自己造成的,同时犯了两个不同的错误。
我正在检查我的 package-name.errors.HttpError 是否是我在安装包的代码中定义的相同 HttpError 类的实例,当然它不是。这导致我注销 require() 的结果,但是,我正在使用 JSON.stringify() 来执行此操作,这当然会 omit职能。因此,我相信我的包内的 require() 以某种方式没有被正确解析。
关于javascript - 无法在 AWS Lambda 中使用 NPM 包,require() 损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53797512/