我的项目结构是下一个:
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
文件,但它应该位于lambda1
和lambda2
目录中,而问题将此文件位于顶层,这没有达到预期的效果。
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