Deno 是一个基于 V8 引擎的新一代 JavaScript 运行时环境,它提供了许多 Node.js 没有提供的功能。但是,Deno 不支持直接引入 CommonJS 模块,这给许多前端开发者带来了困扰。在本文中,我们将介绍如何解决这个问题,并提供示例代码。
问题描述
在 Node.js 中,我们可以使用 require()
函数来引入 CommonJS 模块,例如:
const fs = require('fs');
但是,在 Deno 中,我们不能直接使用 require()
函数来引入 CommonJS 模块,否则会报错:
import fs from 'fs'; // 报错
错误信息如下:
error: TS2691 [ERROR]: An import path cannot end with a '.js' extension. Consider importing 'fs' instead. import fs from 'fs.js';
解决方案
使用第三方库
我们可以使用第三方库 esm
来解决这个问题。esm
是一个可以让我们在 Deno 中直接引入 CommonJS 模块的库。我们可以使用以下命令来安装 esm
:
deno install --allow-read --allow-net -f --unstable https://deno.land/x/esm/mod.ts
安装完成后,我们就可以在代码中使用 esm
来引入 CommonJS 模块了,例如:
import esm from 'esm'; const { require } = esm(module); const fs = require('fs');
这样就可以在 Deno 中直接引入 CommonJS 模块了。
自定义加载器
除了使用第三方库 esm
,我们还可以自定义加载器来解决这个问题。我们可以使用以下代码来自定义加载器:
-- -------------------- ---- ------- ------ - ------------ - ---- ----- ------ - ------- - ---- ------- -------- ----------------- - ----- -------- - ------------------------------- ----- ----- ----------- - ---------------------- -------- ----- ------ - - -------- -- -- ----- ------- - --- ------------------ ---------- ------------- --------------- ---------------- ------ --------------- - ----- -- - ------------------------------------------
这样就可以在 Deno 中直接引入 CommonJS 模块了。
总结
在本文中,我们介绍了在 Deno 中不能直接引入 CommonJS 模块的问题,并提供了两种解决方案:使用第三方库 esm
和自定义加载器。使用这些方法,我们就可以在 Deno 中愉快地使用 CommonJS 模块了。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/65dd37241886fbafa4a941be