ESM 从 index.js 无法正常工作的文件夹中导入所有文件

Dav*_*ira 5 javascript node.js es6-modules

考虑这个非常简单的项目:esm-test

Node.js v13上运行。

这个项目"type":"module"在他的package.json所以 Node.js 中默认将所有文件.js视为 ECMAScript 模块。请参阅:ECMAScript 模块 - 启用.

它具有以下非常简单的结构:

- package.json
- src/
  - stuff/
    - a.js
    - b.js
    - index.js
  - app.js
Run Code Online (Sandbox Code Playgroud)

该文件app.js是包入口点。

我的目的是stuff/使用该index.js文件从文件夹中导入所有文件。我知道在 ES6 中,在index.js文件夹中有一个文件可以让您隐式地从文件夹中执行导入,而无需index.js在导入语句中指定。

所以我可以这样做:

import { a, b } from './stuff'
Run Code Online (Sandbox Code Playgroud)

代替:

import a from './stuff/a.js'
import b from './stuff/b.js'
Run Code Online (Sandbox Code Playgroud)

但这对我不起作用。它显示以下错误:

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'
}
Run Code Online (Sandbox Code Playgroud)

使用 CommonJS 模块工作。但我想用 ESM 来做。

你能帮我解决这个问题吗?

小智 8

ESM 中自动导入index.js是 ode.js 当前版本中的一项实验性功能。您可以在启动服务器时使用标志--experimental-specifier-resolution=node

例如node --experimental-specifier-resolution=node index

请参阅此链接以获取更多信息。