在NodeJs微服务体系结构中,我应该使用每个服务的package.json吗?

我目前正在开发一个NodeJs中的微服务架构。 我的第一个方法是每个服务的package.json 。 尽pipe访问公共区域(使用日志logging或数据库实用程序)对于所有微服务来说可能非常棘手。 例如:

 common-area > logger.js package.json - install module typeorm service1 > app.js - use logger.js package.json - also install module typeorm 

当运行node app.js (服务1)时,我们最终加载了2个typeorm模块,一旦我们做了两个不同的安装,一个在公共区域(logging器使用),另一个在service1。

我应该只使用一个package.json ,对于所有的微服务,只产生一个node_modules文件夹?

我应该只使用一个package.json,对于所有的微服务,只产生一个node_modules文件夹?

当你在做微服务时,你不应该担心有多个node_modules目录,因为微服务的一个要点是能够把它们放在不同的主机上,或者放在不同的容器中,而且无论如何都不能共享它们的依赖关系。

每个微服务应该是一个单独的服务。 您应该避免紧密耦合,并避免可能因与微服务体系结构对抗而产生的抽象漏洞,并将它们结合在一起。

当然,微服务并不是唯一可以在实践中使用的体系结构,但是你需要微服务,那么每一个微服务都应该是完全独立的。 否则,它不是微服务。

如果在服务之间可以共享任何通用代码,则将其放入所需的全部或部分服务所需的模块中。 您可以将私有模块保留在npm上,您可以托pipe一个私有npmregistry,或者您可以直接从GitHub或GitLab私有回购站安装该模块。 所有你需要做的添加一个私有(或公共)模块托pipe在GitHub将运行:

 npm install user/repo --save 

其中user是GitHub上的用户(或组织)名称, repo是存储库的名称。 请记住,要安装这样一个模块,如果它是在一个私人的回购在该机器上使用的SSH密钥将不得不属于一个用户已经读取回购。 您也可以使用GitHub上的部署密钥来获得更大的灵活性。

您甚至可以通过创build一个包含所有依赖关系的独立模块,并一次性将它们公开给您的服务,从而简化在您的服务中加载外部依赖关系。 例如,如果您创build一个名为dependencies的模块,如下所示:

 module.exports = { _: require('lodash'), P: require('bluebird'), fs: require('mz/fs'), // ... }; 

那么你可以在你的微服务中使用所有这些模块:

 const { _, P, fs } = require('dependencies'); 

当你有大量的小型微服务时,特别是当这些服务被拆分成多个文件时,这可以简化很多事情。