node.js - 带有 Winston 记录器的 AWS Lambda 抛出 Runtime.ImportModuleError
问题描述
我正在尝试在 AWS Lambda 中实现 Winston 记录器(版本 3.2.1)。在此评论之后,我有以下代码:
const winston = require('winston');
const waitForLogger = async (logger) => {
const loggerDone = new Promise((resolve) => logger.on('finish', resolve));
logger.end();
return loggerDone;
};
exports.handler = async (event) => {
const logger = winston.createLogger({
transports: [
new winston.transports.Console(),
],
});
logger.log('info', 'some message');
await waitForLogger(logger);
return {
statusCode: 200,
body: 'test passed',
};
};
但是在使用 Rollup 生成构建并使用 Terraform 部署函数并在 AWS 控制台上对其进行测试后,我收到此错误:
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module './has-flag.js'",
"trace": [
"Runtime.ImportModuleError: Error: Cannot find module './has-flag.js'",
" at _loadUserApp (/var/runtime/UserFunction.js:100:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
" at Object.<anonymous> (/var/runtime/index.js:45:30)",
" at Module._compile (internal/modules/cjs/loader.js:778:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)",
" at Module.load (internal/modules/cjs/loader.js:653:32)",
" at tryModuleLoad (internal/modules/cjs/loader.js:593:12)",
" at Function.Module._load (internal/modules/cjs/loader.js:585:3)",
" at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)",
" at startup (internal/bootstrap/node.js:283:19)"
]
}
查看不同的模块,我发现“colors”模块需要“has-flag”,这实际上是“winston”的依赖项。
解决方案
请注意,Bunyan日志库与 Rollup 配合得很好,我已经能够创建 AWS Lambda 包并成功测试了日志记录。
推荐阅读
- python - 如何正确地将数组从 Django/Python 传递到 Postgres/PLPGSQL 存储的 proc 可变参数
- javascript - 将 HTML 元素的 innerText 复制到剪贴板
- linux - `execve()` 是否设置寄存器来调用动态链接器或要执行的可执行文件?
- command-line-interface - 术语 'OC_EDITOR="subl" 未被识别为 cmdlet、函数、脚本文件或可运行程序的名称
- python - PyTorch weak_script_method 装饰器
- java - 未找到 Intellij JavaFX helloWorld 模块
- javascript - 在新窗口中打开一个 src 脚本
- mysql - mysql请求如果不存在
- c++ - 使用 std::filesystem::path 在分隔符类型之间进行转换
- node.js - 从 AWS Lambda 提供 zip 文件