node.js - 在本地机器上的 VSCode 中使用 NodeJS 运行带有层的 AWS Lambda
问题描述
我的项目结构如下:
MyProject
layers
myLayer1
nodejs
node_modules
myLayer1
myExtension.js
lambda1
handler.js
lambda2
handler.js
jsconfig.json
myExtension.js
module.exports.myTest = () => {
return 'My extension test';
};
handler.js
const myext = require('myLayer1');
module.exports.handler = async (event) => {
return {
statusCode: 200,
body: JSON.stringify({
message: myext.myTest()
})
}};
当我部署到 AWS 时,一切正常。但我无法在我的本地机器上运行/调试它。
根据我发现的 jsconfig.json 文件在这种情况下应该有助于映射路径,但是无论我在那里写什么,VSCode/NodeJS 都会忽略它(我试图将它放在 MyProject 根文件夹和 lambda 文件夹中)。
如果我将 handler.js 中的“require”更改为:
const myext = require('./layers/myLayer1/nodejs/node_modules/myLayer1');
当我将代码部署到 AWS 时,这显然会破坏代码。
解决方案
概述
这类似于寻找如何从多个层引用模块的另一个问题:How configure Visual Studio Code to resolve input paths for AWS Lambda Layers (javascript)
更简单的答案,对于单层for的lambda函数node_modules
,就是使用没有依赖关系jsconfig.json
的lambda的package.json
文件所在目录下的文件(这个不是整个项目的根,而是lambda函数项目的根只要)。
该问题的示例项目确实尝试使用一个jsconfig.json
文件,但它应该位于lambda1
andlambda2
目录中,而该问题的该文件位于顶层,这没有预期的效果。
VS 代码的示例jsconfig.json
文件
对于问题中的示例项目,此文件应放置在以下两个位置:
MyProject/lambda1/jsconfig.json
MyProject/lambda2/jsconfig.json
// https://code.visualstudio.com/docs/languages/jsconfig
{
"compilerOptions": {
// baseUrl is the path used for pathless / naked node module includes
"baseUrl": "../layer/node_modules/",
"moduleResolution": "node",
"module": "commonJS"
}
}
完整的示例代码/项目结构
推荐阅读
- php - 找不到类“Maatwebsite\Excel\Excel”
- html - 确保用户在使用 Odoo html 表单构建器时在提交时选择下拉列表中的值
- xml - XSL 复制所有内容并替换
- android - 为背景操作栏设置渐变
- forms - 带有 BorderIcons 的无边框表单(如 Office 2016 应用程序)
- vue.js - 如何将 axios/axios 拦截器全局附加到 Nuxt?
- pandas - 如何提取列的唯一值及其计数并使用索引键存储在数据框中
- delphi - firemonkey 中带有样式书的透明表单
- javascript - 弹出关闭事件检测javascript
- postgresql - AWS RDS (PostgreSQL) 自动备份