lisonge / vite-plugin-monkey

A vite plugin server and build your.user.js for userscript engine like Tampermonkey, Violentmonkey, Greasemonkey, ScriptCat
MIT License
1.31k stars 70 forks source link

cjs can not require open module #95

Closed magicdawn closed 1 year ago

magicdawn commented 1 year ago

"vite-plugin-monkey": "^3.3.0",

build:vite: 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.

如果用了 esm 依赖, tsup 打的 cjs build 其实没有意义(会报错...)


建议:

lisonge commented 1 year ago

请问如何复现这个错误?

magicdawn commented 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


模板

但我 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 😂

lisonge commented 1 year ago

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 打包进去了

lisonge commented 1 year ago

fixed by v3.3.1

magicdawn commented 1 year ago

这也是个解法!

不过 sindre 的包新版都是 esm only ...