Package.json start script, babel- node: не найдено на сервере heroku

Когда я запускаю heroku local или когда я просто делаю npm start локально, мое приложение строит и работает нормально. Однако, когда я развертываю в heroku, приложение аварийно говорит, что не может найти babel-node.

Вот вывод журнала:

2016-04-21T22:20:44.320025+00:00 heroku[api]: Deploy 5d9a9da by [email protected]
2016-04-21T22:20:44.320084+00:00 heroku[api]: Release v9 created by [email protected]
2016-04-21T22:20:44.542062+00:00 heroku[slug-compiler]: Slug compilation started
2016-04-21T22:20:44.542069+00:00 heroku[slug-compiler]: Slug compilation finished
2016-04-21T22:20:44.501025+00:00 heroku[web.1]: State changed from crashed to starting
2016-04-21T22:20:46.278065+00:00 heroku[web.1]: Starting process with command `npm start`
2016-04-21T22:20:50.467407+00:00 app[web.1]:
2016-04-21T22:20:50.467434+00:00 app[web.1]: > [email protected] start /app
2016-04-21T22:20:50.467435+00:00 app[web.1]: > babel-node index.js
2016-04-21T22:20:50.467436+00:00 app[web.1]:
2016-04-21T22:20:50.479490+00:00 app[web.1]: sh: 1: babel-node: not found
2016-04-21T22:20:50.521936+00:00 app[web.1]:
2016-04-21T22:20:50.538822+00:00 app[web.1]: npm ERR! Linux 3.13.0-79-generic
2016-04-21T22:20:50.539334+00:00 app[web.1]: npm ERR! argv "/app/.heroku/node/bin/node" "/app/.heroku/node/bin/npm" "start"
2016-04-21T22:20:50.539595+00:00 app[web.1]: npm ERR! node v5.10.1
2016-04-21T22:20:50.555119+00:00 app[web.1]: npm ERR! npm  v3.8.3
2016-04-21T22:20:50.555339+00:00 app[web.1]: npm ERR! file sh
2016-04-21T22:20:50.555549+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2016-04-21T22:20:50.555769+00:00 app[web.1]: npm ERR! errno ENOENT
2016-04-21T22:20:50.555965+00:00 app[web.1]: npm ERR! syscall spawn
2016-04-21T22:20:50.556142+00:00 app[web.1]: npm ERR! [email protected] start: `babel-node index.js`
2016-04-21T22:20:50.556305+00:00 app[web.1]: npm ERR! spawn ENOENT
2016-04-21T22:20:50.556488+00:00 app[web.1]: npm ERR!
2016-04-21T22:20:50.556666+00:00 app[web.1]: npm ERR! Failed at the [email protected] start script 'babel-node index.js'.
2016-04-21T22:20:50.556854+00:00 app[web.1]: npm ERR! Make sure you have the latest version of node.js and npm installed.
2016-04-21T22:20:50.557017+00:00 app[web.1]: npm ERR! If you do, this is most likely a problem with the qc-server package,
2016-04-21T22:20:50.557175+00:00 app[web.1]: npm ERR! not with npm itself.
2016-04-21T22:20:50.557343+00:00 app[web.1]: npm ERR! Tell the author that this fails on your system:
2016-04-21T22:20:50.557564+00:00 app[web.1]: npm ERR!     babel-node index.js
2016-04-21T22:20:50.557741+00:00 app[web.1]: npm ERR! You can get information on how to open an issue for this project with:
2016-04-21T22:20:50.557916+00:00 app[web.1]: npm ERR!     npm bugs qc-server
2016-04-21T22:20:50.558110+00:00 app[web.1]: npm ERR! Or if that isn't available, you can get their info via:
2016-04-21T22:20:50.558306+00:00 app[web.1]: npm ERR!     npm owner ls qc-server
2016-04-21T22:20:50.558492+00:00 app[web.1]: npm ERR! There is likely additional logging output above.
2016-04-21T22:20:50.563859+00:00 app[web.1]:
2016-04-21T22:20:50.567790+00:00 app[web.1]: npm ERR! Please include the following file with any support request:
2016-04-21T22:20:50.568004+00:00 app[web.1]: npm ERR!     /app/npm-debug.log
2016-04-21T22:20:51.824822+00:00 heroku[web.1]: State changed from starting to crashed
2016-04-21T22:20:51.808246+00:00 heroku[web.1]: Process exited with status 1

My package.json:

{
  "name": "qc-server",
  "version": "1.0.0",
  "description": "xxxx",
  "main": "index.js",
  "scripts": {
    "test": "mocha --compilers js:babel-core/register --require ./test/test_helper.js 'test/**/*.js'",
    "test:watch": "npm run test -- --watch -G",
    "start": "babel-node index.js"
  },
  "babel": {
    "presets": [
      "es2015"
    ]
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-cli": "^6.6.0",
    "babel-core": "^6.6.0",
    "babel-eslint": "^5.0.0",
    "babel-preset-es2015": "^6.6.0",
    "chai": "^3.5.0",
    "chai-immutable": "^1.5.3",
    "eslint": "^2.2.0",
    "eslint-config-airbnb": "^6.0.2",
    "eslint-plugin-react": "^4.1.0",
    "mocha": "^2.4.5"
  },
  "dependencies": {
    "express": "^4.13.4",
    "immutable": "^3.7.6",
    "node-uuid": "^1.4.7",
    "redux": "^3.3.1",
    "socket.io": "^1.4.5"
  }
}

У кого-нибудь есть предложения?

Ответ 1

Вы должны включить зависимость в package.json, чтобы она была установлена ​​при развертывании.

$ npm install babel-cli -S

Чем вам нужно изменить команду start, чтобы выглядеть как:

"start": "babel-node index.js"

См. здесь для получения дополнительной информации о развертывании babel на сайте heroku.com.

Предупреждение: использование babel- node не рекомендуется в производстве

Ответ 2

У меня такая же проблема, но я думаю, что установить NPM_CONFIG_PRODUCTION=false для установки devDependencies будет лучше. Я использовал команду ниже:

heroku config:set NPM_CONFIG_PRODUCTION=false

Ответ 3

В частности, включите необходимую зависимость в разделе "зависимости", а не "devDependencies" в свой "файл package.json". Это связано с тем, что Heroku удаляет (удаляет) ваши "devDependencies" после завершения процесса сборки, оставляя только "зависимости", чтобы поддерживать приложение как можно более скудным.

Это приводит к ошибкам, если вы создали приложение NodeJS с использованием модулей ES6 и включили необходимые зависимости в "devDependencies" вместо "зависимости", а именно семейство зависимостей "@babel/".