Express.js应用在Railway构建后崩溃,本地运行正常求助
Express.js应用Railway部署后崩溃,报
Unexpected token ";"(esbuild构建) 问题排查方向及解决方案
1. 统一Node.js版本
本地构建使用Node.js 22,但Railway默认Node版本可能低于该版本,导致语法兼容问题:
- 在项目根目录创建
.nvmrc文件,写入22,强制Railway在构建和运行阶段使用Node.js 22。
2. 修复构建脚本的JSON导入语法
构建脚本中import * as packages from './package.json' with { type: 'json' }属于Node.js 20.10+才支持的语法,若Railway Node版本不足,会导致构建脚本执行失败,生成损坏的产物:
改用兼容性更强的读取方式:
import fs from 'fs' const packages = JSON.parse(fs.readFileSync('./package.json', 'utf8')) const listPackages = [...Object.keys(packages.dependencies)]
3. 优化esbuild配置
- 简化外部依赖配置:
packages: 'external'已自动将所有npm依赖设为外部依赖,无需手动导入全部dependencies,修改external数组:external: ['mock-aws-s3', 'aws-sdk', 'nock'], - 匹配target与Railway Node版本:若Railway使用的Node版本不是22,将
target字段改为对应版本(如node18)。 - 临时关闭压缩排查:minify过程可能引发语法异常,先将
minify设为false重新部署测试,若问题消失,再排查压缩相关配置或代码语法问题。
4. 调试构建产物
- 查看Railway构建日志,确认构建过程是否有未终止的错误或警告。
- 下载Railway生成的
build/index.cjs文件,定位报错的;所在行,确认是业务代码还是依赖包的语法问题。
内容的提问来源于stack exchange,提问作者Ahmed Abdelrahman
相关产品推荐
相关产品推荐

