Deno 是一个现代的、安全的 JavaScript 和 TypeScript 运行时环境。虽然它支持 ECMAScript 模块,但是还可以通过一些方式来使用 CommonJS 模块。
CommonJS 模块
CommonJS 是 JavaScript 模块的一种格式。它最初被 Node.js 采用,并被广泛的使用在 Node.js 模块中。 CommonJS 模块使用 require()
函数来引入其他模块,并使用 module.exports
或 exports
对象来导出模块。
示例代码 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.js
是 esm
模块加载器的路径。
自定义模块加载器
更高级的方式是自定义模块加载器。Deno 的模块加载器可以在运行时动态地加载模块,因此我们可以编写一个加载器来解析和加载 CommonJS 模块。
我们需要实现一个函数 createLoader()
,它负责解析模块路径并加载模块。示例代码 loader.js
:
-------- -------------- - ----- ----- - --- ------ ----- - ------------ - - ----- -------- ------------------ --------- - -- --------- -- ------------------------------ - ----- --- - --- -------------- ------------ ----- -------- - --------------------------------- --------------------- ------ --------------------- - ------ ---------- - -------- --------- - --------- - - --- - ----- -- - ------------ ----------- -- --------------- - ------ ---------------------- - ----- ------ - - -------- -- -- ------------- -------- ----- ------- - ---------------- -------- -------- ----- ------- - ---------- -------- -------- -------- ----------- ---------- - ---------- ---- ----- ------ - --- ------------------ ---------- ---------- ------------- ------------ --------- -------------- --------------- ------------------ --- --------------- ---------------------- ------ --------------- - -------- ------------------ - ----- ------- - ----------- -- --------------- - ---------- --- --- --------------- - ----------- -- ------------------ ----- ------ -------- - ------ - ----- -------- -- - ----- - ----- ------- - - --------------- ----- ---- - ----------------- - ---------- ------------------------ --- ----------------------- ---- -- -- - ---------------------------- ---- -- -- -
将模块加载器存储在一个单独的文件中,然后使用 --import-map
参数指定它,就可以使用 CommonJS 模块了:
- ---- --- ----------- ------------ ----------------- ---------- ----------
示例代码 import_map.json
:
- ---------- - ---------------------------- --------------------------------------------- - -
总结
虽然 Deno 并不直接支持 CommonJS 模块,但是可以通过第三方模块 esm
或者自定义模块加载器来使用 CommonJS 模块。如果您需要使用 CommonJS 模块,这些方法将非常有用。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65211e6795b1f8cacd893ed0