我在开源代码中看到有使用require引入chai库的API:
https://github.com/tree-sitter/node-tree-sitter/blob/master/test/tree_test.js#L4
const { assert } = require("chai");
但是我在chai的实际使用中却不能在nodejs的代码中进行require引入:
const { assert } = require("chai");
^
Error [ERR_REQUIRE_ESM]: require() of ES Module /Users/mmkk/Desktop/code/Test/Test-demos/nodejs/nodejs-node-tree-sitter-test-01/node_modules/.pnpm/chai@5.1.1/node_modules/chai/chai.js from /Users/mmkk/Desktop/code/Test/Test-demos/nodejs/nodejs-node-tree-sitter-test-01/test/tree_test.js not supported.
请问这个是什么原因呢?
在 JS 中引入其它模块有两种方式,一种是 CommonJS Module,需要使用 require 引入;一种是 ES6 Module,需要使用 import 引入。一般来说,使用 require 无法引入 ES6 Module;使用 import 也无法引入 CommonJS Module。你这里使用 require 引入 ES6 Module,所以 NodeJS 报错了。
JS 的第三方库有的会提供两种格式的模块,有的在旧版本提供 CommonJS Module,而在新版本提供 ES6 Module。
要解决你的问题,要么将 require 改为 ES6 的 import 语法,要么引入 CommonJS 格式的模块。