"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 是静态的,声明式的(尽管结果在某些方面是动态的)。
我从外面得到了这个 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 是静态的,声明式的(尽管结果在某些方面是动态的)。