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

阅读时长 3 分钟读完

背景

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

纠错
反馈