如何将全栈应用程序部署到heroku或netlify?哪些文件是必需的?

时间:2020-02-29 05:05:35

标签: javascript node.js express heroku netlify

我有一个全栈应用程序,可以在LocalHost上很好地运行,但是一旦将其部署到Web(Heroku或netlify)上,该应用程序就会停止正常运行。我的问题是,为了使后端正常工作并继续使用API​​以更新前端等,我需要进行哪些必要的更改。我已经尝试在express上更改端口:

const PORT = process.env.PORT || 5000;
app.listen(PORT, "0.0.0.0", err => {
  if (err) {
    console.error(err)
  } else {
    console.log(`Running on port ${PORT}`)

} })

我需要为端口添加自己的.env文件,还是heroku自动执行?预先感谢!

2 个答案:

答案 0 :(得分:1)

如果您要使用heroku并假设您已经设置好了heroku帐户,并且已经安装并连接了heroku终端(如果您在那儿遇到麻烦,请告诉我)

然后您需要以下内容:

  1. Procfile-该文件告诉heroku使用什么脚本来运行服务器。确保将其命名为Procfile,并且没有扩展名。

    它可以包含类似以下代码的内容

    web: yarn heroku-start-注意,这里我使用yarn作为我的pacakge管理器,如果您正在使用的话,可以轻松地用npm替换它。我还调用heroku-start

    中定义的脚本package.json

    这里是pacakge.json的示例(我仅包括重要的行)

{
 ...
  "scripts": {
    "dev": "nodemon -w src --exec \"babel-node src --presets env,stage-0\"",
    "build": "babel src -s -D -d dist --presets env,stage-0",
    "start": "pm2 start dist",
    "prestart": "yarn -s build",
    "heroku-prestart": "yarn global add pm2 && pm2 install pm2-logrotate",
    "heroku-start": "node dist",
    "heroku": "yarn -s build && git add . && git commit -m \"Rebuilt dist folder\" && git push heroku mj/bug/memory-leak:master",
    "lint": "eslint src",
    "heroku-postbuild": "echo Skip build on Heroku"
  },
  "devDependencies": {
    "babel-cli": "^6.26.0",
    "babel-core": "^6.26.0",
    "babel-eslint": "^8.0.3",
    "babel-preset-env": "^1.6.1",
    "babel-preset-stage-0": "^6.24.1",
    "eslint": "^4.13.0"
  },
  "eslintConfig": {
    "parserOptions": {
      "ecmaVersion": 9,
      "sourceType": "module"
    },
    "env": {
      "node": true
    },
    "rules": {
      "no-console": 0,
      "no-unused-vars": [
        "warn",
        {
          "argsIgnorePattern": "^_"
        }
      ]
    }
  },
  "heroku-run-build-script": true
}

我正在使用babel来构建我的项目。请不要对我拥有的大量脚本感到不知所措,其中有些是无用的。但是,您应该注意脚本下的"heroku-start": "node dist"行-这是我的脚本,用于在heroku上运行我的应用程序。您可以说类似node index.js之类的信息,因为我正在使用dist,因为babel正在构建我的应用程序以使其可用于较早的ecma版本,同时允许我使用新的ecma版本,脚本build是生成我的dist文件夹。

为了您有兴趣,我还提供了我的devDependences。

  1. 您还需要app.json-该文件基本上描述了您的heroku应用程序。

这是一个样本

{
  "name":"myApp",
  "description":"my cool app",
  "repository":"https://github.com/mycoolapp/",
  "logo":"http://node-js-sample.herokuapp.com/node.svg",
  "keywords":["node","express","anothertag"],
  "image":"heroku/nodejs"
}

完成此操作后,您可以将项目上传到heroku,它应该可以正常运行。您可以在heroku和github上的master分支之间设置一个钩子,以便在推送或合并时自动部署。

下一步:

我注意到您的代码中出现了一些问题,我不建议您在heroku上使用0.0.0.0,以下是有关https://help.heroku.com/P1AVPANS/why-is-my-node-js-app-crashing-with-an-r10-error为何的一些解释

这是您的新代码

const PORT = process.env.PORT || 5000;
app.listen(PORT, function(err) {
  if (err) {
    console.error(err)
  } else {
    console.log(`Running on port ${PORT}`)
}
}

也不要使用箭头功能,因为某些浏览器,heroku可能无法正确构建它(这就是为什么我使用babel的原因)。

最后,这是一个在heroku上创建Node.js应用程序的很好的教程。

https://appdividend.com/2018/04/14/how-to-deploy-nodejs-app-to-heroku/

祝你好运。

答案 1 :(得分:0)

如果要使用netlify,则只能托管静态文件,这意味着如果要这样做,则可能需要将后端与前端代码分开 在heroku中托管后端 和您在netlify上的前端 另外,如果您要在同一服务器上构建后端响应,您还需要一个procfile来告诉heroku如何处理您的应用程序希望这能帮助对netlify / heroku部署感到疑惑的人们