node.js - 在部署到 lambda 时包括本地依赖项

标签 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

基本部署利用方便的 node-lambda npm 模块,但是当我使用如下语句引用本地共享组件时:

var sharedService = require('../../shared-component-1/dist/index');

这与 node-lambda run 命令配合使用效果很好,但 node-lambda deploy 会删除此本地依赖项。可能是有道理的,因为我正在我的依赖项中的“root”目录下面,所以我想也许我会利用 gulp 来完成这项工作,但我对它很陌生,所以我可能是做一些愚蠢的事情。我的策略是:

  • gulp deploy 依赖于 local-deps 任务
  • local-deps 任务将:
    • npm build --production 到一个目录
    • 然后将此目录通过管道传输到 /local 目录下的微服务
    • 清理共享中的安装
  • 然后我会像这样引用所有共享组件:

    var sharedService = require('local/component-name-1');
    

希望这能实现我想要实现的目标。这个策略有意义吗?我应该考虑更简单的方法吗?有没有人在“gulp speak”中有任何类似的例子?

最佳答案

我有一个答案! :D

TL;DR - 使用 npm link链接在您的公共(public)组件和依赖组件之间创建一个符号链接(symbolic link)。

所以,我有一个只有两个模块的项目:

- main-module
- referenced-module

其中每一个都是一个 Node 模块。如果我 cd 进入 referenced-module 并运行 npm link,然后 cd 进入 main-modulenpm link referenced-module,npm 将“安装”我的 referenced-module 到我的 main-module 并将其存储在我的node_modules 文件夹。注意:当运行第二个 npm link 时,项目名称是您在 package.json 中找到的名称,而不是目录名称(请参阅 npm link 文档,之前已链接)。

现在,在我的 main-module 中,我需要做的就是 var test = require('referenced-module') 我可以尽情使用它.请务必从您的referenced-modulemodule.exports您的代码!

现在,当您压缩 main-module 以将其部署到 AWS Lambda 时,链接将被解析,真正的 模块将被放置在它们的位置!我已经对此进行了测试并且它可以工作,虽然还没有使用 node-lambda,但我不明白为什么这应该是一个问题(除非它对包恢复做了一些不同的事情)。

这种方法的好处还在于,我对 referenced-module 所做的任何更改都会在开发过程中被我的 main-module 自动获取,所以我不需要不必运行任何 gulp 任务或任何东西来同步它们。

我发现这是一个非常好的、干净的解决方案,我能够在几分钟内让它工作。如果我上面描述的任何内容没有任何意义(因为我自己才刚刚发现这个解决方案!),请发表评论,我会尽力为您澄清。

2016 年 2 月更新

根据您的要求和您的应用程序的大小,可能有一个有趣的替代方案可以比使用符号链接(symbolic link)更优雅地解决这个问题。看看Serverless .这是构建无服务器应用程序的一种非常巧妙的方式,并且包括一些有用的功能,例如能够分配触发您正在编写的 Lambda 函数的 API 网关端点。它甚至允许您编写 CloudFormation 配置脚本,因此如果您有其他资源要部署,那么您可以在此处执行此操作。需要“测试版”或“产品”阶段?这也可以为你做。我已经使用它一个多星期了,虽然需要进行一些设置并且事情并不总是像您想要的那样清晰,但它非常灵活并且支持社区很好!

关于node.js - 在部署到 lambda 时包括本地依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33511652/

相关文章:

gulp - 检查 runSequence 是否失败

node.js - Primus.io 拦截服务器上的数据

javascript - 将 JSON 转换为 X 类型的 JavaScript 对象

javascript - 将 react 应用程序部署到 netlify 时缺少构建脚本错误

linux - npm 在 linux 机器上安装 couchbase 失败

node.js - 安装任何 npm 时出错

javascript - Gulp-imports,没有生成新文件

javascript - Gulp 缩小 Angular

javascript - 是否可以使用 FlatBuffers 将序列化数据流式传输到文件中?

node.js - VS 代码调试器未运行 : Attribute 'program' does not exist