如何在heroku上部署带有中微子的node.js应用程序



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

这是我的包.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

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

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

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

heroku config:set NPM_CONFIG_PRODUCTION=false

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

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

这应该会让你走的!最后,如果你从Heroku向Neutrino应用程序注入环境变量,你需要确保重新构建应用程序,因为Heroku默认不会这样做。这可能需要对回购进行空承诺,或者其他一些重建机制。

最新更新