我正在使用无服务器框架构建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函数中保留了我的API端点(Lambda处理程序)。其中一些有内部模块,他们只使用,有些人使用Shared模块。我希望对我的所有模块进行单元测试 - 内部和共享以及lambda函数的API测试。我正在使用mocha和chai,并希望将所有内容集成到一个管道中,在git push上运行linters和测试,如果成功,则将API部署到适当的阶段。问题是,为了测试每个模块,我必须在每个具有测试文件的文件夹中将chai作为本地节点模块,并通过相对路径引用要测试的模块。在大多数情况下,由于嵌套,它看起来非常难看。如果我想测试一个内部模块
Tests/Functions/Function1/InternalModule
而且我要求它在测试之上
require('../../../../Tests/Functions/Function1/InternalModule')
+我必须在每个文件夹中安装chai,以便它可以访问。 mocha和测试所需的所有依赖项也是如此,我甚至没有提到配置。我现在考虑的主要想法是天气与否我应该将所有模块带到一个名为模块的文件夹中,并在需要时需要它们 - 最坏的情况
from Functions/Function1
require('../../Modules/Module1')
还要将测试文件保存在模块文件夹中并在里面运行它们,但这需要在每个文件夹中安装断言库。我已经阅读了关于npm链接和符号链接但我想跟踪每个文件夹的依赖关系,所以我可以在从GitHub下载干净项目后在CI环境中安装它们,我无法做链接(或者我已经整个概念错了?)
如果有人能提出更好的解决方案,我将非常感激!
答案 0 :(得分:0)
Node使用require的方式比我想象的要多得多!
首先,Node.js查看给定模块是否是核心模块 - Node.js带有许多直接编译成可执行二进制文件的模块(例如http,fs,sys,events,path等)。这些核心模块将始终优先于加载算法。
如果给定的模块不是核心模块,Node.js将开始搜索名为“node_modules”的目录。它将从当前目录(相对于Node中当前正在执行的Javascript文件)开始,然后在文件夹层次结构中向上运行,检查node_modules文件夹的每个级别。
我将尝试将所有模块放在一个单独的文件夹中,每个文件夹都有自己的文件夹,前缀为FunctionName_,所以我知道每个模块的使用位置,以及测试文件+ package.json文件。然后,如果我需要一个模块,我可以从浅嵌套的函数中获取它,看起来不那么糟糕:
from Functions/Function1
require('module-1');
with package.json
"dependencies":{
"module-1":"file:../../Modules/Function1_Module1"
}
并有一个单独的文件夹共享我保留共享模块。 我仍然愿意接受更好的想法!