SvelteKit Node生产环境自定义端口配置出错,如何在构建时嵌入端口
SvelteKit Node适配器自定义端口配置错误排查与解决方法
你的操作错误点
- .env文件格式错误:你把启动命令和环境变量混写在一起了,.env文件只能单独定义键值对,不能添加
node build这类执行命令,正确格式应为每行一个环境变量。 - 混淆构建与运行阶段的环境变量用途:
node -r dotenv/config build是让Node加载环境变量后执行构建脚本,但SvelteKit的构建过程不需要端口、主机这类运行时变量,这些变量是给运行构建完成的产物使用的,不是构建阶段用的。
正确的配置流程
不需要手动修改构建后的index.js,有两种标准方式实现自定义端口:
方式1:运行时通过环境变量指定(推荐,灵活可控)
- 在项目根目录创建
.env文件,内容为:HOST=127.0.0.1 PORT=3003 - 执行常规构建命令:
npm run build - 运行构建产物时加载环境变量:
如果用pm2启动,直接在配置里注入环境变量即可:node -r dotenv/config build/index.js
创建ecosystem.config.js配置文件:
然后启动:module.exports = { apps: [{ name: 'sveltekit-app', script: './build/index.js', env: { HOST: '127.0.0.1', PORT: '3003' } }] }pm2 start ecosystem.config.js
方式2:构建时嵌入默认端口(适合固定端口场景)
如果希望构建后的产物默认使用3003端口,无需每次运行都传变量,可以修改svelte.config.js的适配器配置:
import adapter from '@sveltejs/adapter-node'; /** @type {import('@sveltejs/kit').Config} */ const config = { kit: { adapter: adapter({ env: { host: '127.0.0.1', port: '3003' } }) } }; export default config;
执行npm run build后,构建产物的index.js里默认端口就会变成3003,运行时如果有外部环境变量PORT,依然会优先使用外部变量的值。
内容的提问来源于stack exchange,提问作者Clifton Labrum
相关产品推荐
相关产品推荐

