You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 10:32:44