SvelteKit(基于Vite)应用启动时执行Shell命令方法咨询
在SvelteKit(Vite)启动时执行pocketbase.sh的几种方案
1. 直接修改package.json脚本命令
这是最快捷的实现方式,通过串联Shell命令控制执行顺序:
后台运行PocketBase+启动SvelteKit:适合开发场景,让PocketBase在后台常驻,不占用当前终端输出
{ "scripts": { "dev": "./pocketbase.sh & vite dev" } }若需要终端关闭后PocketBase仍运行,可配合
nohup:nohup ./pocketbase.sh & vite dev。前台同时输出双进程日志:如果需要同时查看PocketBase和Vite的运行日志,用
concurrently工具统一管理:
先安装依赖:npm install concurrently --save-dev再修改脚本:
{ "scripts": { "dev": "concurrently \"./pocketbase.sh\" \"vite dev\"" } }前置启动PocketBase:利用npm的钩子机制,确保PocketBase先启动再运行SvelteKit:
{ "scripts": { "predev": "./pocketbase.sh &", "dev": "vite dev" } }predev会自动在dev命令执行前触发。
2. 编写自定义Vite插件
通过Vite的生命周期钩子,精准控制脚本执行时机,适合需要逻辑判断的场景:
在vite.config.js中添加自定义插件:
import { spawn } from 'child_process'; import { defineConfig } from 'vite'; import { sveltekit } from '@sveltejs/kit/vite'; export default defineConfig({ plugins: [ sveltekit(), { name: 'pocketbase-boot', configureServer() { // 开发服务器启动前执行脚本 spawn('./pocketbase.sh', [], { stdio: 'inherit', // 同步终端日志输出 shell: true }); }, // 如需生产构建前执行,添加buildStart钩子 buildStart() { spawn('./pocketbase.sh', [], { stdio: 'inherit', shell: true }); } } ] });
你还可以在插件中加入错误捕获逻辑,比如检查PocketBase是否成功启动。
3. 封装独立启动脚本
写一个Shell脚本整合所有启动逻辑,适合复杂场景(比如端口检查、数据初始化):
创建start-dev.sh:
#!/bin/bash # 启动PocketBase并记录进程ID ./pocketbase.sh & echo $! > pocketbase.pid # 启动SvelteKit vite dev # 可选:SvelteKit停止时自动关闭PocketBase kill $(cat pocketbase.pid) rm pocketbase.pid
给脚本添加执行权限:
chmod +x start-dev.sh
之后直接运行./start-dev.sh即可完成一站式启动。
内容的提问来源于stack exchange,提问作者Nihad
相关产品推荐
相关产品推荐

