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

部署Node.js应用至Heroku时遭遇Babel Parser构建错误

解决Heroku部署Node.js应用时Babel编译系统文件的错误

看起来你遇到的问题根源很明确:你的Babel构建命令在Heroku上意外尝试编译了服务器的系统级文件,导致语法错误。

错误原因分析

你的build脚本使用了babel .,这个命令会递归编译当前目录下所有文件和子目录。在本地环境中,这个目录只有你的应用代码和node_modules(你已经忽略了它),但在Heroku服务器上,当前目录下还有一个.heroku系统目录,里面包含了Heroku自带的npm依赖文件。

当Babel尝试编译.heroku/node/lib/node_modules/npm/node_modules/cmd-shim/index.js时,遇到了旧的八进制字面量0755——在严格模式下这种写法是不被允许的,所以触发了语法错误。这也是为什么本地构建正常,但Heroku上失败的核心原因。

解决方案

你需要修改Babel命令,避免编译无关的系统目录,有两种推荐方式:

1. 精确指定要编译的源码目录(推荐)

如果你的应用源码都集中在某个目录(比如src/),直接指定这个目录给Babel,完全避免遍历其他目录:

"build": "rm -rf ./dist && mkdir dist && babel src -s -d dist --presets=@babel/env",
"build-app": "babel src -s -d dist --presets=@babel/env"

2. 扩展忽略列表,排除系统目录

如果你的源码分散在根目录,就把.heroku目录加入Babel的忽略列表,同时保留对node_modules的忽略:

"build": "rm -rf ./dist && mkdir dist && babel . -s -d dist --presets=@babel/env --ignore node_modules,.heroku",
"build-app": "babel . -s -d dist --presets=@babel/env --ignore node_modules,.heroku"

额外检查

确认Heroku的构建流程:Heroku默认会执行npm run build脚本(如果存在),而你的release脚本是发布阶段的命令,需要额外配置才会触发。所以确保build脚本是你实际想要在构建阶段运行的命令,避免脚本逻辑混淆。

修改后重新部署,应该就能绕过对系统文件的编译,顺利完成构建了。

内容的提问来源于stack exchange,提问作者Okezie Frank Obiedere

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:23:54