У меня есть проект NodeJS со следующей структурой каталогов, где файл package.json
находится в моем каталоге root, а мои исходные и тестовые файлы 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, и я принес AWS SDK в проект. Это требуется в первых нескольких строках кода:
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. Он должен быть в состоянии найти его, так как это всего лишь один родительский каталог по сравнению с исходным кодом.
Если я переместу папку node_modules в папку src/
, ошибка исчезнет, и я смогу использовать модули. Я не понимаю, как работает node_modules / discovery? Как я могу заставить приложение обнаруживать модули дальше по иерархии каталогов?