gpt4 book ai didi

javascript - 无法在 AWS Lambda 函数上使用 ES6;如何在 Lambda 中导入 ES6 模块

转载 作者:行者123 更新时间:2023-12-05 00:39:18 25 4
gpt4 key购买 nike

我有一个图书馆 foo用 ES6 编写,import/export在 typescript 中。
我有一个应用程序 bar使用 foo . bar也是用exports和Typescript编写的。我想得到 bar在 AWS Lambda 上运行。
据我所知,我不能使用 import/export在 Lambda(运行时节点 14.x)中为

export const handler = async () => {...};
会出错,但是
exports.handler = async () => {...};
将不会。
所以在我的 tsconfig我已经设定:
    "target": "ES5", (or ES6)
"module": "CommonJS",
在编译器选项下。
有了这个,在 Lambda 上运行我得到错误,因为它现在尝试 require foo图书馆并说它必须使用 import .
我怎样才能实现我的最终目标?
正如我所看到的,有 3 个选项,因为我对 JS 的细微差别还很陌生,所以我对它们都不了解。
  • 有我的bar应用程序转译,或使用 webpack,或任何可能用于复制的工具 import在 cjs 中。
  • 有我的foo库还包括一个 CJS 发行版(开始这样做并从我必须通过的箍中得到许多错误以使库在 es6 中工作)。
  • 我在 Lambda/Typescript 中遗漏了一些东西,这将使这变得容易。
  • 最佳答案

    在 Node v14 中添加了 ES 模块支持。但是,我们需要帮助 Node 确定他必须使用哪种类型来加载文件。
    如果你只使用 ES 模块,这很简单,你可以添加 "type": "module"给您的package.json文件以告诉 Node 使用 ES 模块。另一种方法是使用不同的文件扩展名。但是,由于 AWS Lambda 需要以 filename.methodname 的形式配置处理程序,它将始终使用 .js扩展名,这使得您无法为您的入口点使用不同的文件扩展名。
    我已经测试了 "type": "module"在 AWS Lambda 中,这似乎有效。我还没有测试过互操作性如何与使用 CommonJS 模块的依赖项一起工作,但我认为这可以开箱即用。
    您可以引用this blog有关 Node 如何处理此问题的更多信息。

    关于javascript - 无法在 AWS Lambda 函数上使用 ES6;如何在 Lambda 中导入 ES6 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68808998/

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