我有一个具有以下目录结构的NodeJS项目,其中package.json
文件位于我的根目录中,而NodeJS源代码和测试文件位于两个不同的子目录中。
注意:为了减少屏幕截图的大小,删除了大量软件包-通常,这不是node_modules /文件夹中的所有软件包。
您可以在屏幕快照中看到相关性,但这是我的package.json
相关性列表:
{
"name": "hello_world",
"main": "src/lambda.js",
"license": "MIT",
"dependencies": {
"aws-sdk": "^2.659.0",
"jsonschema": "^1.2.6",
"uuid": "^7.0.3"
},
"scripts": {
"test": "mocha tests/unit/"
},
"devDependencies": {
"chai": "^4.2.0",
"mocha": "^6.1.4"
}
}
AWS Lambda中正在使用Node代码,并且我已经将AWS开发工具包引入了项目。在编写的前几行代码中是必需的:
let AWS = require('aws-sdk');
let Configuration = require('./collectionConfiguration');
let Response = require('./response');
let App = require('./app');
//let uuid = require('uuid');
exports.handler = async (event, context) => {
// Create the dependencies that the app requires
let config = new Configuration();
let sns = new AWS.SNS();
try {
if (event.body == null || event.body == "") {
return new Response(422, null, "Request body is missing required fields.", null);
}
let projectRequest = JSON.parse(event.body);
let app = new App();
//return await app.run(projectRequest);
} catch (err) {
console.log(err);
return new Response(500, null, err, null);
}
return new Response(401, null, null, null);
};
我可以在本地运行代码并调用Lambda,而不会出现任何问题。如果我取消注释let uuid = require('uuid');
,那么我会收到运行时错误:
错误:找不到模块'uuid'
我不确定为什么可以找到aws-sdk而不能找到uuid模块。我尝试了另一个模块jsonschema
模块,但收到相同的错误。
我的理解是,Node将在文件系统的上游工作,以查找node_modules目录。它应该可以找到它,因为它只是源代码中的1个父目录。
如果我将node_modules文件夹移到src/
文件夹中,则错误消失了,我可以使用模块了。我是否不了解node_modules /发现的工作原理?如何获取该应用程序以发现目录层次结构中更远的模块?