javascript - ESM 从 index.js 的文件夹中导入所有文件不起作用
问题描述
考虑这个非常简单的项目: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
该文件app.js
是包入口点。
stuff/
我的目的是使用该文件从文件夹中导入所有index.js
文件。我知道在 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 来做。
你能帮我解决这个问题吗?
解决方案
在 esm 中自动导入 index.js 是 node.js 当前版本中的一项实验性功能。--experimental-specifier-resolution=node
您可以在启动服务器时使用标志。
前任-node --experimental-specifier-resolution=node index
请参考此链接以获取更多信息https://nodejs.org/api/esm.html#esm_resolver_algorithm
推荐阅读
- javascript - getjson 问题。未能加载资源
- azure - 带有专用终结点的主动故障转移的 Azure SQL 数据库连接字符串
- c++ - 如何在 C++ 代码中包含 Mariadb?
- ios - IOS可以复制超过300MB的本地文件吗?
- python - 在python中保持对象静态
- android - 如何格式化字符串以在 PDF 中打印新行 - 无法正确打印新行 - Kotlin
- java - Kubernetes 和 JVM 内存设置
- javascript - 正则表达式条件搜索 javascript
- vb.net - 在字符串中查找单词的所有实例并将它们显示在文本框中(vb.net)
- airflow - xcom 值被 if/else 循环中的 else 语句覆盖