解决 Deno 无法解析 ESM 模块的问题

背景

Deno 是一个现代化的 JavaScript 和 TypeScript 运行时环境,它的目标是取代 Node.js。和 Node.js 不同,Deno 默认使用 ECMAScript 模块 (ESM) 进行模块化。但是,在实际开发过程中,有些 NPM 包还没有完全支持 ESM,这样就会出现 Deno 无法解析 ESM 模块的问题。

例如,假设我们想要在 Deno 中使用 NPM 上的 lodash

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

将会得到以下错误:

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

这是因为 lodash 不是一个 ESM 模块,而是一个 CommonJS 模块。

解决方案

要解决这个问题,我们需要使用一些工具来将 CommonJS 模块转换成 ESM 模块,然后再在 Deno 中使用它们。

1. 使用 esbuild

esbuild 是一个非常快速的 JavaScript 打包器和压缩器。它支持将 CommonJS 模块转换成 ESM 模块。

首先,我们需要全局安装 esbuild

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

然后,我们可以使用以下命令来将 lodash 转换成 ESM 模块:

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

现在,我们可以在 Deno 中导入 lodash

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

2. 使用 rollup

Rollup 是一个类似 webpack 的 JavaScript 打包器。但是,它专注于将 CommonJS 模块和 ES6 模块转换成 ESM 模块。

首先,我们需要全局安装 rollup

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

然后,我们需要创建一个 rollup.config.js 文件:

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

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

最后,我们可以使用以下命令来将 lodash 转换成 ESM 模块:

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

现在,我们可以在 Deno 中导入 lodash

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

结论

本文介绍了两种将 CommonJS 模块转换成 ESM 模块的方法,以解决 Deno 在解析 NPM 包时遇到的问题。尽管这些方法可能增加了一些额外的步骤和依赖关系,但它们为我们提供了更广泛的选择,使我们能够在 Deno 中使用更多的第三方库。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670f80d35f5512810264ef8d