gpt4 book ai didi

javascript - 将 Node 14.X 程序转换为 AWS Node 12.X Lambda 函数

转载 作者:行者123 更新时间:2023-12-01 17:16:08 24 4
gpt4 key购买 nike

我的目标
获取一个 Node 程序(命令行服务器端程序,而不是 Web 应用程序)并将其部署为 AWS 中的 lambda 函数。
背景:我的 Node 开发环境/方法

  • 我的 MacBook Pro 上的 Node 14.X:版本 14.2.0,默认启用 ECMAScript 模块支持
  • 将我的软件开发为 ES6 模块,如下所示:
  • 在我的 package.json 文件中输入 type: module
  • 使用 .js 扩展而不是 .mjs 和 .cjs 扩展(因为 VS Code 智能感知与多扩展方法不兼容)
  • 由于这是一个后端程序,我没有做任何蒸腾或捆绑(目前没有 Babel 或 Webpack)


  • 创建 lambda 函数
  • 使用 AWS (12.X) 支持的最新 Node 环境
  • 从我在 AWS lambda 环境中可以看出:
  • 在这种情况下,入口点是硬编码的(index.js)
  • 我无法将命令行参数传递给 Node

  • 如果我尝试以不变的方式运行我的代码(使用类型:模块),它会按预期失败,因为 AWS Node 正在尝试“要求”我的 ES6 模块:
  • “必须使用 import 加载 ES 模块:不支持 ES 模块的/var/task/index.js\nrequire()。而是将 index.js 重命名为以 .cjs 结尾,将要求代码更改为使用 import(),或从/var/task/package.json 中删除“type”:“module”。”

  • 如果我尝试将文件的扩展名更改为显式,AWS 会作呕,因为它将入口点硬编码为“index.js”
  • 如果我天真地从 package.json 中删除 type:module,它会按预期失败,因为它希望一切都是 CommonJS:
  • “语法错误:不能在模块外使用 import 语句”



  • 我需要帮助的地方
    从我完成的几个小时的阅读/研究中,似乎这些是我的选择??:
  • 重写我的代码以使用 CommonJS(不受欢迎,我想使用现代功能/方法)
  • 设置 babel 或 WebPack 之类的打包程序将我的 ES6 模块转换为 CommonJS,并将转换后的代码转储到 lambda
  • 使用“esm”

  • 我的问题
  • 我在自己的代码中“全力以赴”模块是否正确?
  • 上面哪种方法:#1、#2、#3——或其他方法——是这里最简单的成功途径和“正确”的方法?

  • 谢谢!

    最佳答案

    就个人而言,我会采用 transpile 方法。这样您就可以继续以您想要的方式编写代码并输出 lambda 满意的内容。
    我用 TypeScript 编写 lambda,并编译为 lambda 兼容的 JavaScript (ES2018)。
    有各种部署工具 - SAM、无服务器等 - 但请查看 claudiajs ,部署选项可以很容易地指定包含您的入口点的文件和该文件中的函数名称。
    此外,就使用命令行向 lambda 发送数据而言,这可能来自最终调用 lambda 的事件。此事件可以包含与命令行参数相同的所有信息。

    关于javascript - 将 Node 14.X 程序转换为 AWS Node 12.X Lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62722387/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com