(node:9511) ExperimentalWarning: ESM 模块加载器是实验性的
Posted
技术标签:
【中文标题】(node:9511) ExperimentalWarning: ESM 模块加载器是实验性的【英文标题】:(node:9511) ExperimentalWarning: The ESM module loader is experimental 【发布时间】:2020-11-28 16:36:08 【问题描述】:我正在尝试在服务器端使用 ES6。我已将端点与服务器文件分开:
archive.js:
import Router from "express";
const router = Router();
router.get("/", async (req, res) => "some code");
export default router;
当我想像这样将它导入我的服务器文件时:
import archive from "./endpoints/archive.js";
app.use("/archive", archive);
它给了我一个错误:
(node:9565) ExperimentalWarning:ESM 模块加载器是实验性的。 内部/模块/run_main.js:54 internalBinding('errors').triggerUncaughtException()
有什么想法吗?我不想回到 require/module.exports
【问题讨论】:
什么版本的nodejs?默认情况下,.js
文件被假定为 CommonJS 文件,而不是 ESM 模块,除非您在 package.json 文件中适当地标记了它。通过将 ESM 模块设为 .mjs
文件而不是 .js
文件来让 ESM 模块工作要容易得多,因为加载器假定任何 .mjs
文件都是 ESM 模块。此警告/错误出现在哪个文件中?
我在我的 package.json 和每个 js 文件中都有 type: module 我正在使用导入/导出没有任何问题。仅针对此行我有问题:从“./endpoints/archive.js”节点版本导入存档:v12.18.3
【参考方案1】:
这是我从 github repo 中提取的一个新目录。我已经尝试了很多事情/解决方案,但结果我必须克隆到一个新的目录/环境。 找不到问题或适当的修复,但在新目录/环境中我没有这个问题。
【讨论】:
【参考方案2】:您可以使用 Node v14.12.0;在哪里解决了这个问题,并阅读此文档https://nodejs.org/api/esm.html#esm_package_json_type_field
【讨论】:
【参考方案3】:经过几次尝试后,我意识到“nodemon”上的“--experimental-modules”标志会导致在整个应用程序中实现导入时出现问题,因此我确实更新了该标志以使用新标志来显示显式文件名”-- es-module-specifier-resolution=node" 现在完美运行 这里有一篇关于这个新标志的文章:https://nodejs.medium.com/announcing-a-new-experimental-modules-1be8d2d6c2ff
因此,对于 explane,您可以执行如下脚本:
nodemon --es-module-specifier-resolution=node
还要记住你使用的 nodejs 版本低于 12.XX、14.XX 或最后一个稳定版本。
Upgrade Node.js to the latest version on Mac OS
我希望这可以帮助更多的开发者:)
【讨论】:
以上是关于(node:9511) ExperimentalWarning: ESM 模块加载器是实验性的的主要内容,如果未能解决你的问题,请参考以下文章