如何通过es6导入导入nodejs模块“module”以使用“createRequire”创建“require”函数以便使用节点的“require”?

sys*_*bot 9 javascript node.js ecmascript-6

我正在编写一个 JavaScript es6 模块,其中包含“Mocha”测试用例,该测试用例测试包含我的应用程序的实际功能的 JavaScript es6 模块。

我正在尝试通过 es6 import 导入 nodejs 模块“module”,如下所示:

import { createRequire } from 'module';
Run Code Online (Sandbox Code Playgroud)

接下来,我通过调用“createRequire”创建一个“require”函数:

const require = createRequire(import.meta.url);
Run Code Online (Sandbox Code Playgroud)

之后我尝试使用“require”导入nodejs模块:

const chai = require('chai');
const assert = chai.assert;
Run Code Online (Sandbox Code Playgroud)

我将所有内容放在一个 HTML 文件中,启动一个 Web 服务器并在浏览器中打开该 HTML 文件。

不幸的是,第一行在 Firefox 浏览器的控制台中给了我一个错误:

TypeError: Error resolving module specifier: module

Chromium 浏览器给我以下错误消息:

Uncaught TypeError: Failed to resolve module specifier "module". Relative references must start with either "/", "./", or "../".

实际上,提供相对参考也不起作用:

我安装了 Nodejs 模块“module”( npm install module) 并使用了该模块的相对路径。不幸的是,浏览器不知道如何加载模块,因为没有给出具体的入口点。

我只是尝试遵循手册,但没有运气:

https://nodejs.org/api/modules.html#modules_module_createrequire_filename

你怎么认为?我应该如何更改我的代码才能使其正常工作?

非常感谢您的宝贵建议。

小智 4

我希望您已经使用“npm install module”命令安装了该模块,尝试使用 commonJS 模式并按以下方式包含该模块

const { createRequire } = require('module');
Run Code Online (Sandbox Code Playgroud)