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 时,这显然会破坏代码。
这类似于寻找如何从多个层引用模块的另一个问题: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文件,但它应该位于lambda1和lambda2目录中,而问题将该文件位于顶层,这没有达到预期的效果。
jsconfig.json文件对于问题中的示例项目,该文件应放置在以下两个位置:
MyProject/lambda1/jsconfig.jsonMyProject/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
| 归档时间: |
|
| 查看次数: |
1567 次 |
| 最近记录: |