如何在 koishi 插件中使用 Pure ESM package?

安装官方推荐的方式使用 yarn build 构建源代码,但是发现构建后的代码有:

const koishi_1 = require("koishi");
const webdav_1 = require("webdav");

其中 webdav 是一个 Pure ESM package ,这样导入会导致其他人无法安装插件。

Error [ERR_REQUIRE_ESM]: require() of ES Module xxx/index.js from xxx/lib/index.js not supported.
Instead change the require of xxx/index.js in xxx/lib/index.js to a dynamic import() which is available in all CommonJS modules.

即使我在应用目录下的 package.json 文件中加入了 "type": "module" 也没有办法改变构建后的代码。

感觉可以用 esbuild 打包成单文件来处理(koishi 的 build 看起来似乎是用的 tsc),但是没看懂 yakumo 是如何使用的,或者有什么更好的办法吗?

1 个赞

小伙伴在发帖之前可以先搜索论坛内的现有帖子哦~

看过这个贴子了,我想表达的意思是“对于这种引入第三方纯 ESM 包的插件,有没有一个官方的推荐的构建发布方式?”。
毕竟 ESM 是现在的大趋势,纯 ESM 包会越来越多,但是现在的 koishi 默认构建脚本 yakumo build 在这方面不是很有用……

1 个赞

有没有一个官方的推荐的构建发布方式

有的哦~ 个人比较推荐降版本,比如你所提到的 webdav 包降级到 4.11.2 就可以使用了

此外,fork 原仓库然后修改 tsconfig 编译 CJS 也是个人比较推荐的方式

毕竟 ESM 是现在的大趋势

Koishi 的所有包都是使用 ESM 语法进行开发的哦~

纯 ESM 包会越来越多

上面的帖子也提到了,纯 ESM 包等同于抛弃了 Node 仍在支持的版本,但 Koishi 希望尽可能地让每一位用户都能搭建自己的机器人,所以肯定不会放弃 CJS 的

1 个赞

好的,感谢回答!

1 个赞