我创建了一个lambda函数来获取dynamodb中存储的项目列表。然后我执行了npm run build命令,之后我得到了.js文件。我将dist内容与节点模块webpack.config.js和package.json沿着压缩并上传了它。当我尝试测试它时,我得到了以下错误。但据我检查,代码中没有错误。
{
"errorType": "Runtime.UserCodeSyntaxError",
"errorMessage": "SyntaxError: Cannot use import statement outside a module",
"trace": [
"Runtime.UserCodeSyntaxError: SyntaxError: Cannot use import statement outside a module",
" at _loadUserApp (/var/runtime/UserFunction.js:98:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)",
" at Object.<anonymous> (/var/runtime/index.js:43:30)",
" at Module._compile (internal/modules/cjs/loader.js:956:30)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)",
" at Module.load (internal/modules/cjs/loader.js:812:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:724:14)",
" at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)",
" at internal/main/run_main_module.js:17:11"
]
}
4条答案
按热度按时间ki0zmccv1#
我有同样的错误与节点
uuid
模块。导入和使用它如下修复了我的问题:kmynzznz2#
我可以使用require()很长一段时间,但是某些包,比如netlify,不能通过require()加载到lambda中。
但是AWS在2022年初改进了ES和commonJS的导入语句支持......参见here。遗憾的是没有很好地描述。
以下步骤可能并不完美,但对我很有效:
1.如果尚未切换到AWS功能上的NodeJs v14,请切换到该版本
1.打包你想再次使用的包,不要只有一个nodejs文件夹,还要有一个node 14文件夹。node 14文件夹在这里被提到,我认为是必不可少的。如果你忘记了如何创建lambda包,请遵循docs here。
1.创建一个lib.mjs文件,并通过从/opt/nodejs/node 14/node_modules/[my-package]/[maybe-some-subfolder]/index. js导入来加载包。
1.您可以从lib.mjs导出所需的对象,然后从index.js加载它
lib.mjs:
Index.js:
这花了我很长时间来研究,我的方法可能并不完美。我被迫找到一个加载netflify的解决方案,它只能通过导入语句工作。我很高兴在评论中得到反馈,我愿意相应地调整我的教程。
目前,如果可以的话,我还是建议你坚持使用require()。如果不行,我希望我能帮上忙。
PS:此方法不需要Webpack。
xzv2uavs3#
这可能有点晚了,但是我在导入模块时使用require而不是import修复了我的错误。
ovfsdjhp4#
您的导入有问题。请检查您的代码(导入部分),并查看IDE是否检测到任何错误。对于我的情况,问题是:
import Jimp from 'jimp'
我把它改成了
import Jimp from 'jimp'
个现在一切正常了。