如何在 Deno 中使用 CommonJS 模块

阅读时长 6 分钟读完

Deno 是一个现代的、安全的 JavaScript 和 TypeScript 运行时环境。虽然它支持 ECMAScript 模块,但是还可以通过一些方式来使用 CommonJS 模块。

CommonJS 模块

CommonJS 是 JavaScript 模块的一种格式。它最初被 Node.js 采用,并被广泛的使用在 Node.js 模块中。 CommonJS 模块使用 require() 函数来引入其他模块,并使用 module.exportsexports 对象来导出模块。

示例代码 math.js

在另一个文件中,我们可以通过 require() 来使用这个模块:

在 Deno 中使用 CommonJS 模块

目前,Deno 已经原生支持 ECMAScript 模块,并不直接支持 CommonJS 模块。但是在 Deno 中,并不需要使用 Node.js 或者其他构建工具来编译 CommonJS 模块,因为 Deno 的内置模块加载器是非常灵活的。

可以通过两种方式来使用 CommonJS 模块:使用第三方模块 esm 或者自定义模块加载器。

使用第三方模块 esm

esm 是一个第三方模块,它允许我们在 Deno 中导入 CommonJS 模块。 首先,我们需要安装 esm

然后,在我们的代码中添加以下语句:

现在就可以使用 require() 函数来引入 CommonJS 模块了。示例代码 index.js

运行代码时,需要添加命令行参数 --loader 来指定加载器:

其中,./loader.jsesm 模块加载器的路径。

自定义模块加载器

更高级的方式是自定义模块加载器。Deno 的模块加载器可以在运行时动态地加载模块,因此我们可以编写一个加载器来解析和加载 CommonJS 模块。

我们需要实现一个函数 createLoader(),它负责解析模块路径并加载模块。示例代码 loader.js

-- -------------------- ---- -------
-------- -------------- -
  ----- ----- - --- ------
  ----- - ------------ - - -----

  -------- ------------------ --------- -
    -- --------- -- ------------------------------ -
      ----- --- - --- -------------- ------------
      ----- -------- - --------------------------------- ---------------------
      ------ ---------------------
    -
    ------ ----------
  -

  -------- --------- - --------- - - --- -
    ----- -- - ------------ -----------

    -- --------------- -
      ------ ----------------------
    -

    ----- ------ - - -------- -- --
    ------------- --------

    ----- ------- - ---------------- -------- --------
    ----- ------- - ---------- -------- -------- -------- ----------- ---------- - ---------- ----
    ----- ------ - --- ------------------ ---------- ---------- ------------- ------------ ---------
    -------------- --------------- ------------------ --- --------------- ----------------------

    ------ ---------------
  -

  -------- ------------------ -
    ----- ------- - ----------- -- --------------- - ---------- --- ---
    --------------- - ----------- -- ------------------ -----
    ------ --------
  -

  ------ -
    -----
    --------
  --
-

----- - ----- ------- - - ---------------
----- ---- - ----------------- - ---------- ------------------------ ---
----------------------- ---- -- -- -
---------------------------- ---- -- -- -

将模块加载器存储在一个单独的文件中,然后使用 --import-map 参数指定它,就可以使用 CommonJS 模块了:

示例代码 import_map.json

总结

虽然 Deno 并不直接支持 CommonJS 模块,但是可以通过第三方模块 esm 或者自定义模块加载器来使用 CommonJS 模块。如果您需要使用 CommonJS 模块,这些方法将非常有用。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65211e6795b1f8cacd893ed0

纠错
反馈