首页 > 解决方案 > 在本地机器上的 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 时,这显然会破坏代码。

标签: node.jsvisual-studio-codeaws-lambda

解决方案


概述

这类似于寻找如何从多个层引用模块的另一个问题: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文件,但它应该位于lambda1andlambda2目录中,而该问题的该文件位于顶层,这没有预期的效果。

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


推荐阅读