【发布时间】:2023-04-04 11:23:01
【问题描述】:
考虑这个非常简单的项目:esm-test
在 Node.js v13 上运行。
这个项目在他的package.json 中有"type":"module",所以默认情况下Node.js 会将所有文件.js 视为ECMAScript 模块。见:ECMAScript Modules - Enabling。
它有以下非常简单的结构:
- package.json
- src/
- stuff/
- a.js
- b.js
- index.js
- app.js
文件app.js是包入口点。
我的目的是使用index.js 文件从stuff/ 文件夹中导入所有文件。我知道在 ES6 中,在文件夹中有一个 index.js 文件可以让您从文件夹中隐式执行导入,而无需在导入语句中指定 index.js。
所以我可以这样做:
import { a, b } from './stuff'
代替:
import a from './stuff/a.js'
import b from './stuff/b.js'
但这对我不起作用。它显示以下错误:
internal/modules/esm/default_resolve.js:96
let url = moduleWrapResolve(specifier, parentURL);
^
Error: Cannot find module C:\projects\esm-test\src\stuff imported from C:\projects\esm-test\src\app.js
at Loader.resolve [as _resolve] (internal/modules/esm/default_resolve.js:96:13)
at Loader.resolve (internal/modules/esm/loader.js:72:33)
at Loader.getModuleJob (internal/modules/esm/loader.js:156:40)
at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:42:40)
at link (internal/modules/esm/module_job.js:41:36) {
code: 'ERR_MODULE_NOT_FOUND'
}
使用 CommonJS 模块可以工作。但我想用 ESM 来做。
你能帮我解决这个问题吗?
【问题讨论】:
-
你看到@Vivek 的回答了吗?如果它解决了您的问题,请接受他的回答。我看到了他的回答。这是一个完美的答案。
标签: javascript node.js es6-modules