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

Kam*_*rey 8 node.js aws-lambda visual-studio-code

我的项目结构如下:

MyProject
  layers
    myLayer1
      nodejs
        node_modules
          myLayer1
            myExtension.js
  lambda1
    handler.js
  lambda2
    handler.js
  jsconfig.json
Run Code Online (Sandbox Code Playgroud)

myExtension.js

module.exports.myTest = () => {
  return 'My extension test';
};
Run Code Online (Sandbox Code Playgroud)

处理程序.js

const myext = require('myLayer1');
module.exports.handler = async (event) => {
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: myext.myTest()
    })
}};
Run Code Online (Sandbox Code Playgroud)

当我部署到 AWS 时,一切正常。但我无法在本地计算机上运行/调试它。

根据我的发现,在这种情况下 jsconfig.json 文件应该有助于映射路径,但是 VSCode/NodeJS 会忽略我在那里编写的任何内容(我尝试将其放置在 MyProject 根文件夹和 lambda 文件夹中)。

如果我将 handler.js 中的“require”更改为:

const myext = require('./layers/myLayer1/nodejs/node_modules/myLayer1');
Run Code Online (Sandbox Code Playgroud)

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

hun*_*aro 4

概述

这类似于寻找如何从多个层引用模块的另一个问题:How configure Visual Studio Code to resolve input paths for AWS Lambda Layers (javascript)

更简单的答案,对于单层 for 的 lambda 函数node_modules,是使用没有依赖关系的jsconfig.jsonlambda 的package.json文件所在目录中的文件(这不是整个项目的根,而是 lambda 函数项目的根)仅有的)。

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

VS Code 的示例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"
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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