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

参考lisonge/userscript项目遇到ReferenceError: __MONKEY_WINDOW__ is not defined #46

Closed northsea4 closed 1 year ago

northsea4 commented 1 year ago

简述

shared/userscript-config/src/index.ts中引入了vite-plugin-monkey/dist/client中的方方法GM_getValue,用于某个自定义方法,在packages/gitrec中使用该自定义方法。而在构建packages/gitrec时,提示如下信息:

ReferenceError: __MONKEY_WINDOW__ is not defined
    at file:///home/runner/work/userscripts-lisonge/userscripts-lisonge/shared/userscript-config/dist/index.js:2:20
    at ModuleJob.run (node:internal/modules/esm/module_job:193:25)
    at async Promise.all (index 0)
    at async ESMLoader.import (node:internal/modules/esm/loader:526:24)
    at async loadConfigFromBundledFile (file:///home/runner/work/userscripts-lisonge/userscripts-lisonge/node_modules/.pnpm/registry.npmmirror.com+vite@4.1.4_lx63oaw2dyx6c23wnkvjnvox4q/node_modules/vite/dist/node/chunks/dep-ca21228b.js:62337:21)
    at async loadConfigFromFile (file:///home/runner/work/userscripts-lisonge/userscripts-lisonge/node_modules/.pnpm/registry.npmmirror.com+vite@4.1.4_lx63oaw2dyx6c23wnkvjnvox4q/node_modules/vite/dist/node/chunks/dep-ca21228b.js:62222:28)
    at async resolveConfig (file:///home/runner/work/userscripts-lisonge/userscripts-lisonge/node_modules/.pnpm/registry.npmmirror.com+vite@4.1.4_lx63oaw2dyx6c23wnkvjnvox4q/node_modules/vite/dist/node/chunks/dep-ca21228b.js:6[18](https://github.com/northsea4/userscripts-lisonge/actions/runs/4288608080/jobs/7470804904#step:7:19)43:28)
    at async build (file:///home/runner/work/userscripts-lisonge/userscripts-lisonge/node_modules/.pnpm/registry.npmmirror.com+vite@4.1.4_lx63oaw2dyx6c23wnkvjnvox4q/node_modules/vite/dist/node/chunks/dep-ca21228b.js:44512:[20](https://github.com/northsea4/userscripts-lisonge/actions/runs/4288608080/jobs/7470804904#step:7:21))
    at async CAC.<anonymous> (file:///home/runner/work/userscripts-lisonge/userscripts-lisonge/node_modules/.pnpm/registry.npmmirror.com+vite@4.1.4_lx63oaw2dyx6c23wnkvjnvox4q/node_modules/vite/dist/node/cli.js:813:9)
undefined
/home/runner/work/userscripts-lisonge/userscripts-lisonge/packages/gitrec:
 ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  gitrec@1.0.0 build: `vite build`

复现

请查看 复现项目,最新的workflow pnpm version 7。 也可以fork该测试仓库后手动运行 Test 这个workflow。 具体的测试代码请在commit test 中查看。

lisonge commented 1 year ago
import { GM_getValue } from 'vite-plugin-monkey/dist/client';

只能在 浏览器端 使用,你的 userscript-config 这个包使用了 vite-plugin-monkey/dist/client 但是又在 vite.config.ts 引入

vite.config.ts 运行在 nodejs 上,自然就会报错

northsea4 commented 1 year ago

明白了谢谢! 应避免在vite.config.ts引入包含GM_getValue这一类client方法,看来要使用新的shared包😁

lisonge commented 1 year ago

你可以在 shared 目录新建一个 userscript-config-web 包,将仅浏览器运行的 api 封装在此处

lisonge commented 1 year ago

另外你的 tsup.config.ts 可以排除 workspace 的依赖

// shared/userscript-config/tsup.config.ts
import { defineConfig } from 'tsup';
import workspacePkg from '../../package.json';
import selfPkg from './package.json';

export default defineConfig({
  entry: ['src/index.ts'],
  sourcemap: true,
  clean: true,
  dts: true,
  target: 'esnext',
  outDir: 'dist',
  format: ['esm'],
  external: Object.keys(workspacePkg.dependencies),
});