"The requested module ' does not provide an export named 'default' " 错误,但仅在相对导入中

"The requested module ' does not provide an export named 'default' " error, but only in relative import

我从外面得到了这个 api 模块。当它作为 node_module 安装时(使用 npm install),然后像这样进行导入工作:

import MyAPI from 'api'

但是,当我查看 node_module 中的 api 文件夹并取出作为模块入口点的 api.js,并进行相对导入时这个:

import MyAPI from './api.js'

然后我得到错误:

"The requested module ./api.js does not provide an export named 'default'"

我无法控制 api 模块的构建方式。它如何在一种情况下起作用而在另一种情况下不起作用?这是节点 12。

您已确认模块文件夹中的 package.json 中没有 "type": "module"。这就是问题所在。它使用较旧的 CommonJS 系统,而不是您的模块正在使用的较新的标准 ESM 系统。 Node.js 在通过 ESM (details) 加载 old-style CommonJS 模块时进行一些自动转换。

如果您想将该文件复制出其模块并在不同的模块环境中使用它,则必须将其导出(并可能导入)转换为 ESM。例如,而不是:

exports.example = function example() { };

会是

export function example() { }

但这可能很复杂,因为这两个系统的工作方式不同。 CommonJS 是动态的,基于 属性 赋值(尽管结果是静态的),ESM 是静态的,声明式的(尽管结果在某些方面是动态的)。