Closed magicdawn closed 1 year ago
请问如何复现这个错误?
如果项目没迁移到 esm, 就会用上 vite-plugin-monkey/dist/node/index.cjs
例如, 装好 vite-plugin-monkey 后, 启动 node repl, 执行 require('vite-plugin-monkey')
就会复现
$ node
Welcome to Node.js v18.14.2.
Type ".help" for more information.
> require('vite-plugin-monkey')
<dir>/node_modules/.pnpm/vite-plugin-monkey@3.3.0_vite@4.4.3/node_modules/vite-plugin-monkey/dist/node/index.cjs:791
var import_open = __toESM(require("open"), 1);
^
Uncaught:
Error [ERR_REQUIRE_ESM]: require() of ES Module <dir>/node_modules/.pnpm/open@9.1.0/node_modules/open/index.js from <dir>/node_modules/.pnpm/vite-plugin-monkey@3.3.0_vite@4.4.3/node_modules/vite-plugin-monkey/dist/node/index.cjs not supported.
例如我的使用场景 https://github.com/magicdawn/bilibili-app-recommend/tree/024c79f2ffbe058d93bd39e4d198a79c09914dd6
CommonJS
, https://github.com/magicdawn/bilibili-app-recommend/blob/024c79f2ff/tsconfig.json#L35C18-L35C26但我 check 了一下 create-monkey 的模板, 都切到了 esm, https://github.com/lisonge/vite-plugin-monkey/blob/create-monkey%401.34.0/packages/create-monkey/template-empty-ts/package.json#L5C20-L5C20
所以估计只影响我这种没有用 create-monkey 创建项目, 直接用插件, 项目 type=commonjs 的老用户.
影响用户估计只有我, 我改成 esm 也没问题了 = 没有人会碰到问题. 所以 issue 直接关了也 OK 😂
open@9
是一个 esm only
模块,cjs 内部不能使用 require('open')
加载 esm,只能通过 await import('open')
vite 也是通过这种方式来提供 cjs 模块
https://github.com/vitejs/vite/blob/main/packages/vite/index.cjs
另外 vite 内部也用到了 open 这个模块,但是 vite 直接将 open 打包进去了
这也是个解法!
不过 sindre 的包新版都是 esm only ...
"vite-plugin-monkey": "^3.3.0",
如果用了 esm 依赖, tsup 打的 cjs build 其实没有意义(会报错...)
建议: