繁体   English   中英

无服务器Node.js项目结构

[英]Serverless Node.js Project Structure

我正在使用无服务器框架构建RESTful API,以在AWS上运行(API Gateway + Lambda + DynamoDB)。 这是我的第一个Node项目和我的第一个无服务器生产项目,我不知道如何组织它。 到目前为止,我有以下|--Functions |-----Function1 |--------InternalModule |-----Function2 |-----Function3 |--------InternalModule |-----Function4 |--Shared |-----Module1 |-----Module2 |-----Module3 |--Tests |-----Functions |--------Function1 |-----------InternalModule |--------Function2 |-----------InternalModule |--------Function3 |-----------InternalModule |--------Function4 |-----------InternalModule |-----Modules |--------Module1 |-----------InternalModule |--------Module2 |-----------InternalModule |--------Module3 |-----------InternalModule我将API端点(Lambda处理程序)保留在Function中。 他们中有些人只使用内部模块,有些人使用Shared中的模块。 我想对所有模块进行单元测试-内部和共享以及lambda函数的API测试。 我正在使用mocha和chai,并希望将所有内容集成到管道中,该管道可以通过git push运行linter和测试,如果它们成功将API部署到适当的阶段。 问题是,为了测试每个模块,我必须在每个具有测试文件的文件夹中将chai作为本地节点模块,并通过相对路径引用要测试的模块。 在大多数情况下,由于嵌套,它看起来确实很丑陋。 如果我想从Tests/Functions/Function1/InternalModule测试内部模块,并且在测试之上需要它,例如require('../../../../Tests/Functions/Function1/InternalModule') +我必须在每个文件夹中安装chai以便可以访问。 Mocha和测试所需的所有依赖项也是如此,我什至没有提到配置。 我现在正在考虑的主要思想是天气是否与否,我应该将所有模块都放在一个名为modules的文件夹中,并在需要时使用它们from Functions/Function1 require('../../Modules/Module1')最坏情况还请保留测试模块文件夹中的文件并在内部运行它们,但这将需要在每个文件夹中安装断言库。 我已经阅读了有关npm链接和符号链接的信息,但是我想跟踪每个文件夹具有哪些依赖关系,以便在从GitHub下载了干净项目但无法执行链接的情况下,可以将它们安装在CI环境中(或者我已经整个概念错了吗?)

如果有人可以提出更好的解决方案,我将不胜感激!

Node使用require的方式比我想象的要多得多!

首先,Node.js会查看给定的模块是否是核心模块-Node.js附带了许多直接编译成可执行二进制文件的模块(例如http,fs,sys,事件,路径等)。 这些核心模块将始终在加载算法中优先。

如果给定的模块不是核心模块,则Node.js将开始搜索名为“ node_modules”的目录。 它将从当前目录(相对于Node中当前正在执行的Javascript文件)开始,然后沿文件夹层次结构向上移动,并检查node_modules文件夹的每个级别。

在这里阅读更多

我将尝试将所有模块放在一个单独的文件夹中,每个模块都有自己的带有FunctionName_前缀的文件夹,以便我知道每个模块的使用位置以及测试文件+ package.json文件。 然后,如果我需要一个模块,则可以从浅嵌套的函数中获取它,看起来还不错:

from Functions/Function1

require('module-1');

与package.json

"dependencies":{
    "module-1":"file:../../Modules/Function1_Module1"
}

并有一个单独的文件夹Shared,用于存放共享模块。 我仍然欢迎更好的主意!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM