Fresh(Deno) Web服务器修改端口后仍监听8000端口如何解决
Deno Fresh 配置3000端口仍监听8000问题排查方案
按以下优先级逐一排查即可解决:
- 检查端口配置优先级覆盖问题
Fresh读取端口配置的优先级从高到低为:命令行--port参数 >PORT环境变量 > 代码配置 > 默认8000端口。- 先检查启动命令是否携带
--port=8000参数,比如deno task start --port=8000、deno task dev --port=8000这类写法会直接覆盖代码里的端口配置,有则修改为3000或直接去掉该参数。 - 执行
echo $PORT(Windows系统执行echo %PORT%)查看当前终端环境变量,如果返回值为8000,说明环境变量锁定了8000端口,执行unset PORT(Windows执行set PORT=)清除变量后重启,或直接把PORT变量设为3000即可。
- 先检查启动命令是否携带
- 检查启动模式与配置文件匹配问题
这是最高发的踩坑点:Fresh 1.x 版本的开发模式(执行deno task dev启动)默认不会读取main.tsx中start()方法传入的配置,只有生产构建后执行deno task start才会走你写的await start(manifest, { port: 3000 });这段逻辑。
开发模式要改端口要么启动时追加--port=3000参数,要么在项目根目录的fresh.config.ts配置文件中统一声明端口,配置写法如下,对开发、生产模式同时生效,不会出现配置不一致的问题:import { defineConfig } from "$fresh/server.ts"; export default defineConfig({ server: { port: 3000 } }); - 检查代码修改有效性与残留进程问题
- 确认你修改的是当前运行项目根目录下的入口文件,不要改错其他分支、其他路径下的同名
main.tsx文件;同时检查start()方法调用后有没有重复传入port配置覆盖前面的3000设置。 - 杀掉所有残留的Deno进程,避免修改代码前启动的旧服务还在后台占用8000端口造成错觉:Linux/macOS执行
pkill deno,Windows在任务管理器中结束所有deno.exe进程后再重新启动服务。
- 确认你修改的是当前运行项目根目录下的入口文件,不要改错其他分支、其他路径下的同名
- 检查端口占用问题
执行lsof -i:3000(Windows执行netstat -ano | findstr :3000)查看3000端口是否被其他程序占用,如果端口被占,部分旧版本Fresh会自动回退到默认8000端口启动,先释放3000端口再启动服务即可。
内容的提问来源于stack exchange,提问作者MmM
相关产品推荐
相关产品推荐

