Как развернуть приложение node.js с нейтрино на герою

Я работал над простым приложением и обслуживал его по героку. Я добавил нейтрино в этот проект. Локально с пряжей это работает, но теперь у меня проблема с подачей на геройку. Вопрос в том, как я могу установить нейтрино на герою?

вот мой 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"
  }
}

а вот логи на героку

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

1 ответ

Решение

Прежде всего, если вы развертываете статическое веб-приложение или одностраничное приложение в 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 (например, response-router), вы можете начать с:

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

Далее вы можете сохранить ваши зависимости разработки / сборки в devDependenciesи установите конфигурацию Heroku для их установки при сборке:

heroku config:set NPM_CONFIG_PRODUCTION=false

Когда Heroku развертывает приложение Node.js (которым является Neutrino), оно пытается использовать скрипт "start", определенный в package.json, для запуска вашего приложения. Это не будет работать для статически построенного веб-приложения, так как мы на самом деле хотим просто собрать файлы и позволить статическому сборочному пакету его обслуживать. Чтобы отменить то, что делает Heroku, вы можете добавить heroku-postbuild Скрипт для вашего package.json:

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

Это должно помочь вам! Наконец, если вы внедряете переменные окружения в свое приложение Neutrino из Heroku, вам нужно убедиться, что вы перестраиваете приложение, поскольку Heroku по умолчанию этого не делает. Это, вероятно, влечет за собой пустую фиксацию в вашем репо или какой-то другой механизм перестройки.

Другие вопросы по тегам