在本地计算机上使用 VSCode 中的 NodeJS 运行具有层的 AWS Lambda



我的项目结构是下一个:

MyProject
layers
myLayer1
nodejs
node_modules
myLayer1
myExtension.js
lambda1
handler.js
lambda2
handler.js
jsconfig.json

我的扩展.js

module.exports.myTest = () => {
return 'My extension test';
};

处理程序.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 文件夹中(。

如果我将.js处理程序中的"require"更改为:

const myext = require('./layers/myLayer1/nodejs/node_modules/myLayer1');

当我将其部署到AWS时,这显然会破坏代码。

概述

这类似于另一个寻找如何从多个层引用模块的问题:如何配置 Visual Studio Code 以解析 AWS Lambda Layers (javascript( 的输入路径

对于具有单层的 lambda 函数,更简单的答案是使用node_modules的 lambdapackage.json文件所在的目录中的jsconfig.json文件(这不是整个项目的根,而只是 lambda 函数项目的根(。

问题的示例项目确实尝试使用jsconfig.json文件,但它应该位于lambda1lambda2目录中,而问题将此文件位于顶层,这没有达到预期的效果。

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"
}
}

完整的示例代码/项目结构

https://github.com/pwrdrvr/layers-js-demo

相关内容

最新更新