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

如何配置Heroku,为含NextJS前端的Python项目安装依赖

Heroku部署Python+NextJS项目的配置指南

1. 配置双Buildpack(解决Node.js/npm缺失问题)

Heroku默认只加载Python环境,所以得先添加Node.js的Buildpack,让它优先处理前端构建:
在本地项目根目录执行以下命令:

heroku buildpacks:add --index 1 heroku/nodejs
heroku buildpacks:add --index 2 heroku/python

顺序不能乱,Node.js必须排在前面,确保前端依赖安装和构建流程先完成。

2. 根目录添加package.json

Heroku的Node.js Buildpack会读取根目录的package.json,所以在项目根目录新建该文件,用来触发前端构建流程:

{
  "scripts": {
    "heroku-prebuild": "cd Frontend && npm install",
    "heroku-postbuild": "cd Frontend && npm run build"
  },
  "engines": {
    "node": "20.x" // 替换为你的NextJS兼容的Node版本,比如18.x/20.x
  }
}
  • heroku-prebuild:进入Frontend目录安装所有前端依赖
  • heroku-postbuild:执行NextJS的构建命令,生成生产环境静态文件(默认存放在Frontend/.next目录)
  • engines:指定Node版本,避免版本不兼容导致的构建失败

3. 配置Procfile

根据你的部署需求选择以下方案之一:

方案1:Python后端托管前端静态文件(推荐)

如果使用Flask/Django等Python框架,直接让后端服务NextJS构建后的静态文件,Procfile内容如下:

web: gunicorn your_python_entry_file:app --preload

(将your_python_entry_file替换为你的后端入口文件名,比如app.py)

然后在Python代码中添加静态文件路由(以Flask为例):

from flask import Flask, send_from_directory
import os

app = Flask(__name__)

# 处理NextJS的静态资源文件
@app.route('/_next/<path:path>')
def serve_next_static(path):
    return send_from_directory(os.path.join('Frontend', '.next', 'static'), path)

# 处理首页及所有前端路由
@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def catch_all(path):
    return send_from_directory(os.path.join('Frontend', '.next'), 'index.html')

# 你的后端API路由逻辑...

方案2:前后端分离启动(适合Heroku专业版)

如果需要分开启动后端和前端服务,Procfile可以定义两个进程:

web: gunicorn your_python_entry_file:app --preload
frontend: cd Frontend && npm start

注意:Heroku免费版只会自动启动web进程,frontend进程需要手动通过heroku ps:scale frontend=1命令启动,且免费版存在并发限制。

4. 必要检查

  • 确保Frontend目录下已有package.json和package-lock.json(或yarn.lock),文件内包含NextJS依赖及默认的build脚本
  • 将新增的package.json、修改后的Procfile提交至GitHub,重新触发Heroku部署即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:36:34