vite-plugin-singleton
v1.0.0
Published
同一项目下 dev 与 preview 各只允许一个实例,重复启动的会退出
Maintainers
Readme
vite-plugin-singleton
Vite 插件:单例 dev/preview,就绪后写入锁文件(pid、port、baseUrl),供 E2E、脚本读取。
dev 与 preview 各一把锁,路径固定为项目 root 下的 .dev/。
安装
pnpm add -D vite-plugin-singleton
# or
npm i -D vite-plugin-singleton使用
// vite.config.js / vite.config.ts
import singleton from 'vite-plugin-singleton'
export default defineConfig({
plugins: [singleton()],
})锁文件
- dev:
vite就绪后写入<root>/.dev/dev.lock.json,关闭时删除。 - preview:
vite preview就绪后写入<root>/.dev/preview.lock.json,关闭时删除。
格式(两者相同):
{
"pid": 12345,
"port": 5173,
"baseUrl": "http://localhost:5173"
}- pid:当前进程 PID,用于单例检测(锁存在且 pid 存活则不再起第二个)。
- port:实际监听端口。
- baseUrl:可直接用于 E2E 或脚本的根 URL。
Monorepo 下每个 app 用自己的 vite.config 和 root,锁自然落在各自 root 的 .dev/ 下,无需额外配置。
消费者示例(Shell)
读取 dev baseUrl:
BASE_URL=$(node -e "console.log(JSON.parse(require('fs').readFileSync('.dev/dev.lock.json','utf8')).baseUrl)")读取 preview baseUrl:
BASE_URL=$(node -e "console.log(JSON.parse(require('fs').readFileSync('.dev/preview.lock.json','utf8')).baseUrl)")License
MIT
