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

为何我的Clojure/CLJS应用在Heroku部署时提示react命名空间不可用?

核心问题为npm与cljsjs的react依赖冲突、构建脚本和项目配置不匹配,按以下步骤调整:

  • 移除project.clj中的[cljsjs/react "17.0.2-0"]和[cljsjs/react-dom "17.0.2-0"]依赖。shadow-cljs默认使用npm管理前端依赖,重复引入cljsjs版本会导致命名空间查找逻辑冲突,本地正常是因为本地依赖缓存优先级和Heroku构建环境不一致。
  • 调整bin/build脚本的打包逻辑,你当前使用Leiningen管理项目依赖(有project.clj无deps.edn),原脚本中clojure -A:depstar是Clojure CLI工具的打包命令,依赖deps.edn配置,执行时会找不到对应依赖导致react相关包未被打入构建产物。可以替换为lein对应的uberjar打包命令,也可以补充对应deps.edn配置后再保留该命令。
  • 在shadow-cljs.edn的release配置中补充js依赖解析规则,明确指定react、react-dom从npm引入,避免依赖查找歧义,示例配置:
:release {
  :compiler-options {:optimizations :advanced}
  :js-options {
    :resolve {
      "react" {:target :npm :require "react"}
      "react-dom" {:target :npm :require "react-dom"}
    }
  }
}
  • 调整Heroku buildpack顺序,将Node.js buildpack放在Clojure buildpack之前,确保npm install先执行完成,shadow-cljs编译时可以读取到已安装的npm依赖。
  • 可以在bin/build的npm install命令后新增一行ls node_modules/react,推送后查看Heroku构建日志,确认react依赖已正确安装到对应路径,排除npm安装失败的问题。

内容的提问来源于stack exchange,提问作者JohnBradens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:09:03