【问题标题】:Difficulties understanding nodejs modules in AWS Lambda [duplicate]难以理解 AWS Lambda 中的 nodejs 模块 [重复]
【发布时间】:2022-01-17 00:05:25
【问题描述】:

我正在尝试创建一个在 nodejs 上运行的 AWS Lambda 函数。它只是调用一个 REST API,并且应该返回 API 调用返回的任何内容。我正在尝试使用 node-fetch 模块。一开始我用这个:

const fetch = require('node-fetch');

导致以下错误:必须使用导入来加载 ES 模块

所以我把它改成这样使用导入:

import fetch from 'node-fetch';

这又导致了以下错误:SyntaxError: Cannot use import statement outside a module

接下来我在主文件树的 package.json 中添加了“type”:“module”。

(Main filetree)

{
  "dependencies": {
    "node-fetch": "^3.1.0"
  },
  "name": "aws_lambda",
  "version": "1.0.0",
  "type": "module",
  "main": "index.js"
}

所以现在我收到这样的错误:“errorMessage”:“exports 未在 ES 模块范围内定义\n此文件被视为 ES 模块,因为它具有 '.js' 文件扩展名和 '/var/ task/package.json' 包含 "type": "module"。要将其视为 CommonJS 脚本,请将其重命名为使用 '.cjs' 文件扩展名。",

将文件扩展名更改为 .cjs 让我回到“不能在模块外使用 import 语句”

这怎么这么难?我应该做些什么?谢谢

【问题讨论】:

  • 是的!将 import 语句替换为 'const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));'解决了它,虽然我完全不知道为什么。谢谢!准备把我的头撞到下一堵墙上:)

标签: node.js aws-lambda


【解决方案1】:

如果你想使用 require,你需要通过运行 npm 来使用 node-fetch v2:

npm install node-fetch@2

【讨论】:

    猜你喜欢
    • 2014-01-08
    • 2018-12-18
    • 1970-01-01
    • 2019-11-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 1970-01-01
    相关资源
    最近更新 更多