sti*_*tus
6
javascript
node.js
aws-lambda
es6-modules
我的目标
获取一个节点程序(一个命令行服务器端程序,而不是一个 Web 应用程序)并将其部署为 AWS 中的 lambda 函数。
背景:我的节点开发环境/方法
- 我的 MacBook Pro 上的 Node 14.X:版本 14.2.0,默认情况下启用 ECMAScript 模块支持
- 将我的软件开发为 ES6 模块,如下所示:
- 将类型:模块放入我的 package.json 文件中
- 使用 .js 扩展名而不是 .mjs 和 .cjs 扩展名(因为 VS Code 智能感知与多扩展方法不兼容)
- 由于这是一个后端程序,我没有做任何蒸腾或捆绑(目前没有 Babel 或 Webpack)
创建 lambda 函数
- 使用 AWS (12.X) 支持的最新节点环境
- 从我在 AWS lambda 环境中可以看出:
- 在这种情况下,入口点是硬编码的 (index.js)
- 如果我尝试不加修改地运行我的代码(使用类型:模块),它会按预期失败,因为 AWS 节点正在尝试“要求”我的 ES6 模块:
- “必须使用导入来加载 ES 模块:不支持 /var/task/index.js\nrequire() 的 ES 模块。而是将 index.js 重命名为以 .cjs 结尾,更改需要的代码以使用 import(),或者从 /var/task/package.json 中删除“type”:“module”。”
- 如果我尝试将文件的扩展名更改为显式,AWS 会堵嘴,因为它将入口点硬编码为“index.js”
- 如果我天真地从 package.json 中删除 type:module,它会按预期失败,因为它希望所有内容都是 CommonJS:
我需要帮助的地方
从我完成的几个小时的阅读/研究来看,这些似乎是我的选择??:
- 重写我的代码以使用 CommonJS(不可取,我想使用现代功能/方法)
- 设置 babel 或像 WebPack 这样的打包器将我的 ES6 模块转换为 CommonJS,并将转换后的代码转储到 lambda
- 使用'esm'
我的问题
- 我在自己的代码中“全力以赴”模块是否正确?
- 上面哪种方法:#1、#2、#3——或其他什么——是这里最简单的成功途径和“正确”的方法?
谢谢!