ken*_*ken 6 node.js npm gulp aws-lambda
我有一个回购,其中包含几个"微服务",我上传到AWS的Lambda.另外,我有几个共享库,我想在发送到AWS时打包.
因此我的目录结构如下:
/micro-service-1
/dist
package.json
index.js
/micro-service-2
/dist
package.json
index.js
/shared-component-1
/dist
package.json
component-name-1.js
/shared-component-2
/dist
package.json
component-name-2.js
Run Code Online (Sandbox Code Playgroud)
基本部署利用了方便的node-lambda
npm模块,但当我使用如下语句引用本地共享组件时:
var sharedService = require('../../shared-component-1/dist/index');
Run Code Online (Sandbox Code Playgroud)
这适用于node-lambda run
命令,但node-lambda deploy
删除了本地依赖项.可能是有道理的,因为我要在我的依赖项中的"根"目录下面,所以我想也许我会利用gulp来完成这项工作,但我对它很新,所以我可能会做一些愚蠢的事情.我的策略是:
gulp deploy
依赖于本地DEPS任务npm build --production
到一个目录/local
目录然后我会引用所有共享组件,如下所示:
var sharedService = require('local/component-name-1');
Run Code Online (Sandbox Code Playgroud)希望这能成为我想要实现的目标.这种策略有意义吗?我应该考虑更简单的方法吗?在"gulp speak"中有没有人有这样的例子?
我对此有一个答案!:D
TL; DR-用于npm link
链接在您的公共组件和从属组件之间创建符号链接。
因此,我有一个只有两个模块的项目:
- main-module
- referenced-module
Run Code Online (Sandbox Code Playgroud)
这些都是节点模块。如果我cd
进入referenced-module
并运行npm link
,然后cd
进入main-module
和npm link referenced-module
,则npm将“安装” referenced-module
到我的计算机main-module
并将其存储在我的node_modules
文件夹中。注意:运行第二个npm link
项目时,项目名称是您在中找到package.json
的名称,而不是目录名称(请参阅npm link
先前链接的文档)。
现在,我main-module
所要做的就是var test = require('referenced-module')
,我可以用它满足我的需求。请确保从module.exports
您的代码referenced-module
!
现在,当您压缩将main-module
其部署到AWS Lambda时,链接已解析,实际模块已放置到位!我已经对此进行了测试,并且可以运行,尽管还不能运行node-lambda
,但是我不明白为什么这应该是一个问题(除非它与软件包还原有所不同)。
这种方法的优点还在于,referenced-module
我main-module
在开发过程中对我所做的任何更改都会自动被我拾取,因此我不必运行任何gulp任务或任何同步它们的任务。
我发现这是一个很好的,干净的解决方案,我能够在几分钟内使它工作。如果上述内容没有任何意义(因为我自己才发现此解决方案!),请发表评论,我会尽力为您澄清。
2016年2月更新
根据您的要求和您的应用程序的大小,可能有一个有趣的替代方法,它比使用符号链接更优雅地解决此问题。看看Serverless。这是构造无服务器应用程序的一种很巧妙的方法,并且包括有用的功能,例如能够分配API Gateway端点来触发您正在编写的Lambda函数。它甚至允许您编写CloudFormation配置的脚本,因此,如果您有其他资源要部署,则可以在此处进行。需要一个“ beta”或“ prod”阶段?这也可以为您做。我已经使用了一个多星期,尽管需要进行一些设置,而且事情并不总是如您所愿,但是它非常灵活,并且支持社区很好!
归档时间: |
|
查看次数: |
1858 次 |
最近记录: |