SvelteKit中如何配置pollInterval以检测文件新版本?
SvelteKit pollInterval生产环境无效问题解决
核心问题
pollInterval是开发模式专属配置,仅在npm run dev时生效,生产环境下该配置不会被加载。生产环境中,SvelteKit会预编译所有页面/组件到构建目录,Node服务启动后直接加载编译后的产物到内存,单纯替换源文件不会触发服务端重新编译,自然看不到更新。
你遗漏的关键
你把开发模式的热更新逻辑套用到了生产环境,生产环境需要通过进程管理工具监听文件变化并重启服务,才能让新代码生效。
解决方案与示例
方案1:用pm2监听构建产物自动重启
pm2是常用的Node进程管理工具,可监听文件变化自动重启服务。
- 安装pm2:
npm install -g pm2 - 创建
ecosystem.config.js配置文件:
module.exports = { apps: [{ name: 'sveltekit-prod', script: 'build/index.js', // adapter-node构建后的入口文件路径 watch: ['build'], // 监听构建产物目录 watch_options: { interval: 3000, // 轮询间隔(毫秒) followSymlinks: false } }] };
- 启动服务:
pm2 start ecosystem.config.js
后续更新代码后,先重新执行npm run build,pm2会检测到build目录变化,自动重启服务,浏览器刷新即可看到新内容。
方案2:用nodemon监听源文件自动构建+重启
如果需要修改源文件后自动完成构建并重启服务,可配合nodemon:
- 安装nodemon:
npm install -D nodemon - 在
package.json中添加脚本:
{ "scripts": { "prod:watch": "nodemon --watch src --watch svelte.config.js --exec 'npm run build && node build/index.js'" } }
- 启动服务:
npm run prod:watch
当src目录或配置文件变化时,nodemon会自动触发构建命令,完成后重启Node服务。
补充:浏览器自动刷新(可选)
如果需要浏览器自动感知更新并刷新,需自行实现版本检测逻辑:
- 在服务端暴露一个接口返回当前应用版本(比如从package.json读取)
- 在前端页面添加定时轮询,对比本地存储的版本与接口返回版本,不一致时执行
location.reload()
内容的提问来源于stack exchange,提问作者m1027
相关产品推荐
相关产品推荐

