如何在 heroku 上使用 neutrino 部署 node.js 应用程序

How to deploying node.js application with neutrino on heroku

我开发了一个简单的应用程序,并在 heroku 上提供了它。我在这个项目中添加了中微子。在本地使用 yarn 它正在工作,但现在我在 heroku 上提供它时遇到问题。问题是如何在 heroku 上安装 neutrino?

这是我的 package.json

{
  "name": "portfolio",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "start": "neutrino start",
    "build": "neutrino build"
  },
  "devDependencies": {
  },
  "dependencies": {
    "neutrino-middleware-sass": "^0.0.1",
    "react": "^16.0.0",
    "react-burger-menu": "^2.1.10",
    "react-dom": "^16.0.0",
    "react-hot-loader": "3.0.0-beta.6",
    "react-router-dom": "^4.2.2",
    "react-typist": "^2.0.4",
    "neutrino": "^7.3.1",
    "neutrino-preset-react": "^7.3.1"
  }
}

这里是 heroku 上的日志

2017-11-07T20:24:27.718248+00:00 app[web.1]: npm ERR! spawn ENOENT
2017-11-07T20:24:27.718349+00:00 app[web.1]: npm ERR!
2017-11-07T20:24:27.718449+00:00 app[web.1]: npm ERR! Failed at the portfolio@0.1.0 start script 'neutrino start'.
2017-11-07T20:24:27.718537+00:00 app[web.1]: npm ERR! Make sure you have the latest version of node.js and npm installed.
2017-11-07T20:24:27.718625+00:00 app[web.1]: npm ERR! If you do, this is most likely a problem with the portfolio package,
2017-11-07T20:24:27.718869+00:00 app[web.1]: npm ERR! not with npm itself.
2017-11-07T20:24:27.718943+00:00 app[web.1]: npm ERR! Tell the author that this fails on your system:
2017-11-07T20:24:27.719014+00:00 app[web.1]: npm ERR!     neutrino start
2017-11-07T20:24:27.719102+00:00 app[web.1]: npm ERR! You can get information on how to open an issue for this project with:
2017-11-07T20:24:27.719214+00:00 app[web.1]: npm ERR!     npm bugs portfolio
2017-11-07T20:24:27.719288+00:00 app[web.1]: npm ERR! Or if that isn't available, you can get their info via:
2017-11-07T20:24:27.719372+00:00 app[web.1]: npm ERR!     npm owner ls portfolio
2017-11-07T20:24:27.719460+00:00 app[web.1]: npm ERR! There is likely additional logging output above.
2017-11-07T20:24:27.722711+00:00 app[web.1]:
2017-11-07T20:24:27.722863+00:00 app[web.1]: npm ERR! Please include the following file with any support request:
2017-11-07T20:24:27.722931+00:00 app[web.1]: npm ERR!     /app/npm-debug.log
2017-11-07T20:24:27.785333+00:00 heroku[web.1]: Process exited with status 1
2017-11-07T20:24:27.797858+00:00 heroku[web.1]: State changed from starting to crashed
2017-11-07T20:24:27.800281+00:00 heroku[web.1]: State changed from crashed to starting
2017-11-07T20:24:36.861424+00:00 heroku[web.1]: Starting process with command `npm start`
2017-11-07T20:24:39.981092+00:00 app[web.1]:
2017-11-07T20:24:39.981104+00:00 app[web.1]: > portfolio@0.1.0 start /app
2017-11-07T20:24:39.981106+00:00 app[web.1]:
2017-11-07T20:24:39.981105+00:00 app[web.1]: > neutrino start
2017-11-07T20:24:39.994350+00:00 app[web.1]:
2017-11-07T20:24:39.987770+00:00 app[web.1]: sh: 1: neutrino: not found
2017-11-07T20:24:40.005120+00:00 app[web.1]: npm ERR! Linux 3.13.0-133-generic
2017-11-07T20:24:40.005428+00:00 app[web.1]: npm ERR! argv "/app/.heroku/node/bin/node" "/app/.heroku/node/bin/npm" "start"
2017-11-07T20:24:40.005665+00:00 app[web.1]: npm ERR! node v6.12.0

首先,如果您要将静态 Web 应用程序或单页应用程序部署到 Heroku,您需要确保您的 Heroku 应用程序正在使用 nodejs 和静态构建包。您可以检查您正在使用哪些构建包:

heroku buildpacks

输出如下:

❯ heroku buildpacks
=== your-app Buildpack URLs
1. heroku/nodejs
2. https://github.com/hone/heroku-buildpack-static

如果您没有设置这些构建包,您可以使用:

heroku buildpacks:add heroku/nodejs
heroku buildpacks:add https://github.com/hone/heroku-buildpack-static

要配置静态站点,请根据 https://github.com/heroku/heroku-buildpack-static 处的文档将 static.json 文件拖放到项目的根目录中。对于初学者,如果您正在构建一个带有 HTML5 路由的单页应用程序(例如,react-router),您可以从:

开始
{
  "root": "build",
  "clean_urls": true,
  "routes": {
    "/**": "index.html"
  }
}

接下来,您可以将 development/build 依赖项存储在 devDependencies 中,并设置 Heroku 配置以在构建时安装它们:

heroku config:set NPM_CONFIG_PRODUCTION=false

当 Heroku 部署 Node.js 应用程序(Neutrino 是)时,它会尝试使用 package.json 中定义的 "start" 脚本来启动您的应用程序。这不适用于静态构建的 Web 应用程序,因为我们实际上只想构建文件并让静态构建包为其提供服务。要覆盖 Heroku 的功能,您可以将 heroku-postbuild 脚本添加到 package.json:

"scripts": {
  "heroku-postbuild": "neutrino build"
}

这应该让你继续!最后,如果您从 Heroku 将环境变量注入 Neutrino 应用程序,您需要确保重新构建该应用程序,因为 Heroku 默认情况下不会这样做。这可能需要将空提交推送到您的回购协议或其他一些重建机制。