小编HUI*_*ANG的帖子

将仅依赖于 ESM 库的包编译为 CommonJS 包

我正在开发一个依赖于仅 ESM 库的包:unified,并且我将我的 npm 包公开为 CommonJS 库。

当我在应用程序中调用我的包时,节点给出了以下错误消息:

不支持 ES 模块 node_modules\unified\index.js 的 require()

错误消息很明显,因为我们不允许使用requireESM 模块,但我不是已经告诉 Typescript 将源代码编译为 CommonJS 格式吗?


参考:

  1. ESM 与 CommonJS
  2. 如何为 ESM 和 CommonJS 创建混合 NPM 模块

commonjs node.js typescript es6-modules

14
推荐指数
2
解决办法
2万
查看次数

为什么 TypeScript 导入 CommonJS 而不是 ESM

我按照本教程创建了一个双包。包文件结构如下所示:

my-awesome-lib
  package.json
  dist
  |-- mjs
    |-- package.json
    |-- index.js
  |-- cjs
    |-- package.json
    |-- index.js
Run Code Online (Sandbox Code Playgroud)

package.json

  "main": "dist/cjs/index.js",
  "module": "dist/mjs/index.js",
  "exports": {
    ".": {
      "require": "./dist/cjs/index.js",
      "import": "./dist/mjs/index.js"
    }
  },
Run Code Online (Sandbox Code Playgroud)

文件夹package.json中的mjs

{
    "type": "module"
}
Run Code Online (Sandbox Code Playgroud)

文件夹package.json中的cjs

{
    "type": "commonjs"
}
Run Code Online (Sandbox Code Playgroud)

在我的 Typescript 应用程序中,我安装了自己的包,并尝试导入它。然而,我观察到一件奇怪的事情:

// src/index.ts
import { Class } from 'my-awesome-lib'
import { Class } from '../node_modules/my-awesome-lib/dist/mjs/index.js';
Run Code Online (Sandbox Code Playgroud)

第一个导入语句指向而../node_modules/my-awesome-lib/dist/cjs/index.js不是mjs文件夹。第二个导入语句是我真正想要的。

谁能告诉我出了什么问题吗?是因为我以错误的方式发布了我的库吗?


附注

这是我的 tsconfig.json

{ …
Run Code Online (Sandbox Code Playgroud)

commonjs node.js typescript es6-modules

7
推荐指数
1
解决办法
6633
查看次数

为 ESM 和 CommonJS 创建混合 npm 模块

假设我正在编写一个名为my-awesome-libusing Typescript 的 npm 库。因为my-awesome-lib依赖于纯ESM库,所以我必须使用ESM语法,即import使用该第三方库。现在一切正常了,包括开玩笑,我按照本教程导出my-awesome-lib为 ESM 和 CommonJS 模块。

同时,我还在使用 CommonJS 语法编写一个依赖于我的自定义库的应用程序,即require('my-awesome-lib'),但 jest 测试套件无法运行,因为:

必须使用 import 加载 ES 模块:path/to/application/node_modules/3rd_party/index.js

这对我来说有点意义,因为第 3 方库是纯 ESM 的,你不能需要ESM 包 - 但这也让我感到困惑:我不是已经告诉 Typescript 将源代码编译成 CommonJS (以及 ESM)吗? )?

我还关注了 Dan Fabulich 关于ESM 与 CommonJS的精彩帖子,但我仍然没有答案。

有人可以帮忙吗?太感谢了。

commonjs typescript jestjs es6-modules

5
推荐指数
0
解决办法
749
查看次数

标签 统计

commonjs ×3

es6-modules ×3

typescript ×3

node.js ×2

jestjs ×1