我在节点 v14 中有一个 lambda 函数,它从 lambda 层导入 AWS SDK v3。
在我的函数中,只有使用 CommonJS 语法,我才能使用层中的节点模块:
const { parseUrl } = require('@aws-sdk/url-parser');
Run Code Online (Sandbox Code Playgroud)
使用 ES 模块不起作用。
import { parseUrl } from '@aws-sdk/url-parser';
Run Code Online (Sandbox Code Playgroud)
它会抛出一个错误:
"errorMessage": "Cannot find package '@aws-sdk/url-parser' imported from /var/task/index.js\nDid you mean to import @aws-sdk/url-parser/dist-cjs/index.js?"
它应该有效。我"type": "module"在package.json本地有进口工作。当我指定 cjs 索引文件的完整路径时,它也会开始工作:
import { parseUrl } from '/opt/nodejs/node_modules/@aws-sdk/url-parser/dist-cjs/index.js';
Run Code Online (Sandbox Code Playgroud)
这真的很奇怪。
我查了一下NODE_PATH,/opt/nodejs/node_modules是这样的,所以不知道问题出在哪里。
完整的实现在这里,因此您可以复制错误: https ://github.com/simon-q/lambda-layer-es-modules-error
是 lambda 层损坏了还是我做错了什么?我真的很感激任何帮助。
谢谢。
amazon-web-services node.js aws-lambda es6-modules aws-lambda-layers