heroku failed at the build script but heroku local web is fine - node.js

I followed instructions, pushed repo to heroku and I find it crashed.
I use heroku/nodejs as a buildpack.
Procfile:
web: npm run build && npm run heroku-server
Scripts:
"scripts": {
"heroku-server": "cross-env SERVER_PROD_PORT=$PORT SERVER_PROD_HOST=0.0.0.0 npm run server",
"browser": "cross-env NODE_ENV=development WEBPACK_CONFIG=browser_dev webpack-dev-server --open",
"build": "cross-env NODE_ENV=production WEBPACK_CONFIG=browser_prod,server_prod webpack --colors",
"build-analyze": "cross-env BUNDLE_ANALYZER=1 NODE_ENV=production WEBPACK_CONFIG=browser_prod,server_prod webpack --colors",
"build-browser": "cross-env NODE_ENV=production WEBPACK_CONFIG=browser_prod webpack --colors",
"build-run": "npm run build && npm run server",
"build-static": "cross-env NODE_ENV=production WEBPACK_CONFIG=static webpack --colors",
"build-static-run": "npm run build-static && npm run static",
"clean": "rimraf dist",
"lint": "eslint .",
"server": "node dist/server",
When I run scripts from Procfile or $ heroku local web everything is builing fine. But pushed repo is throwing the errors in logs:
2018-01-30T22:23:05.780537+00:00 heroku[web.1]: Starting process with command `npm run build && npm run heroku-server`
2018-01-30T22:23:07.502982+00:00 heroku[web.1]: State changed from starting to crashed
2018-01-30T22:23:07.491558+00:00 heroku[web.1]: Process exited with status 1
2018-01-30T22:23:07.292672+00:00 app[web.1]:
2018-01-30T22:23:07.292693+00:00 app[web.1]: > beers#2.10.0 build /app
2018-01-30T22:23:07.292694+00:00 app[web.1]: > cross-env NODE_ENV=production WEBPACK_CONFIG=browser_prod,server_prod webpack --colors
2018-01-30T22:23:07.292695+00:00 app[web.1]:
2018-01-30T22:23:07.421065+00:00 app[web.1]: events.js:137
2018-01-30T22:23:07.421068+00:00 app[web.1]: throw er; // Unhandled 'error' event
2018-01-30T22:23:07.421070+00:00 app[web.1]: ^
2018-01-30T22:23:07.421071+00:00 app[web.1]:
2018-01-30T22:23:07.421073+00:00 app[web.1]: Error: spawn webpack ENOENT
2018-01-30T22:23:07.421074+00:00 app[web.1]: at _errnoException (util.js:1003:13)
2018-01-30T22:23:07.421076+00:00 app[web.1]: at Process.ChildProcess._handle.onexit (internal/child_process.js:201:19)
2018-01-30T22:23:07.421078+00:00 app[web.1]: at onErrorNT (internal/child_process.js:389:16)
2018-01-30T22:23:07.421080+00:00 app[web.1]: at process._tickCallback (internal/process/next_tick.js:152:19)
2018-01-30T22:23:07.421081+00:00 app[web.1]: at Function.Module.runMain (module.js:703:11)
2018-01-30T22:23:07.421083+00:00 app[web.1]: at startup (bootstrap_node.js:193:16)
2018-01-30T22:23:07.421085+00:00 app[web.1]: at bootstrap_node.js:617:3
2018-01-30T22:23:07.426513+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2018-01-30T22:23:07.426855+00:00 app[web.1]: npm ERR! errno 1
2018-01-30T22:23:07.428042+00:00 app[web.1]: npm ERR! beers#2.10.0 build: `cross-env NODE_ENV=production WEBPACK_CONFIG=browser_prod,server_prod webpack --colors`
What am I missing?

First of all, don't put your "npm run build" step in your Procfile.
Doing so will cause that step to run every time your web dyno restarts, which is not what you want.
Instead, you want to run webpack (or whatever else you need for making sure the dependencies you need are present in your app) during slug compilation.
By virtue of the fact that you are using the heroku/node.js buildpack, it will automatically take care of running "npm install" for you (or yarn install, if you choose to use the yarn package manager instead).
However, if you need more than npm/yarn install (e.g. if you need to run webpack to bundle client dependencies), then you need to provide the slug compiler with additional instructions for those steps. A good way to do that is by using heroku-specific build steps.
So, for example, you might want to run webpack in a heroku-postbuild step in your package.json "scripts", e.g.:
"heroku-postbuid" : "cross-env NODE_ENV=production WEBPACK_CONFIG=browser_prod,server_prod webpack --colors",
However, in addition you need to be aware that by default Heroku won't install any of your package.json devDependencies. So if you have webpack itself listed in devDependencies, you won't be able to use it in a heroku-postbuild step by default.
The way to workaround that is to either move webpack (together with any other build dependencies you need) to "dependencies" (instead of "devDependencies"), or to set config var NPM_CONFIG_PRODUCTION to false:
heroku config:set NPM_CONFIG_PRODUCTION=false
For more info, see here and here.

Related

Deploying TypeScript Express Server to Heroku

In attempting to deploy an Express TypeScript server to Heroku, I am encountering an error. I ran heroku logs --tail and this is the output:
2021-12-02T21:09:20.152292+00:00 app[web.1]: > backend#1.0.0 start /app
2021-12-02T21:09:20.152292+00:00 app[web.1]: > ts-node src/index.ts
2021-12-02T21:09:20.152292+00:00 app[web.1]:
2021-12-02T21:09:20.164793+00:00 app[web.1]: sh: 1: ts-node: not found
2021-12-02T21:09:20.176470+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2021-12-02T21:09:20.176764+00:00 app[web.1]: npm ERR! syscall spawn
2021-12-02T21:09:20.176897+00:00 app[web.1]: npm ERR! file sh
2021-12-02T21:09:20.177050+00:00 app[web.1]: npm ERR! errno ENOENT
2021-12-02T21:09:20.184008+00:00 app[web.1]: npm ERR! backend#1.0.0 start: `ts-node src/index.ts`
2021-12-02T21:09:20.184048+00:00 app[web.1]: npm ERR! spawn ENOENT
2021-12-02T21:09:20.184122+00:00 app[web.1]: npm ERR!
2021-12-02T21:09:20.184186+00:00 app[web.1]: npm ERR! Failed at the backend#1.0.0 start script.
2021-12-02T21:09:20.184240+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2021-12-02T21:09:20.189489+00:00 app[web.1]:
2021-12-02T21:09:20.192700+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2021-12-02T21:09:20.192779+00:00 app[web.1]: npm ERR! /app/.npm/_logs/2021-12-02T21_09_20_184Z-debug.log
2021-12-02T21:09:20.372397+00:00 heroku[web.1]: Process exited with status 1
2021-12-02T21:09:20.745674+00:00 heroku[web.1]: State changed from starting to crashed
From my own research, it was suggested I put in a buildpack for TypeScript, the one that comes up on heroku buildpacks:search is zidizei/typescript. I had installed that without success.
Further research suggested heroku node/js buildpack. I ran heroku buildpacks:set heroku/nodejs and tried that without success. So I switch back to zidizei, everything compiles and builds, except for the server start.
I'm confused as to what the root of the problem is, and I think I may have gotten turned around.
Additional steps I've taken:
// package.json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "ts-node src/index.ts",
"dev": "ts-node-dev src/index.ts",
"build": "tsc",
"typeorm": "node --require ts-node/register ./node_modules/typeorm/cli.js",
"db:generate-migration": "yarn typeorm -- migrate:generate --config ormconfig.ts --connection --name",
"db:run-migration": "yarn typeorm -- migration:run"
// Procfile
web: npm start
Alternatively, are there any strong heroku contenders for hosting an express server and a Postgres DB?
Adding: I noticed that when I entered into the environment using heroku run bash --app <my_app_name> that the dist folder is being built. Is the solution to point my start script to something like node dist/src/index.js?
Okay, so for anyone else that is reading this.
My solution was:
In package.json all I had to do was change my start script from
"start": "ts-node src/index.ts",
to
"start": "node dist/src/index.js",
Seems that at some point I got turned around in my documentation and was looking every which way except the obvious one.

How do I run my nodejs application with nodemon?

Problem
Sorry in advance for asking a newbie question but I do hope anyone can help because I've been stuck for a few hours. I am currently working on a student portal assignment to develop a Backend API that reads from csv and stores into the database.
I'm having a very basic trouble of running or starting the Node Application.
Project Directory
Assignment
- .vscode
- external
- config
- controllers
- services
- app.js
- external-system.Dockerfile
- package.json
- packagelock.json
- router.js
- server.js (localhost:5000)
- javascript
- src
- config
- const
- controllers
- errors
- utils
- app.js
- router.js
- server.js (localhost:3000)
- database
- node_modules
- .babelrc
- .env
- .env.sample
- .eslintrc
- docker-compose.yml
- package.json
- packagelog.json
- file.csv
Anyway in short, the javascript folder is where I will have to retrieve the csv file, create the API and storage to the database for the full time students. The external folder is where I have to retrieve the information it and because they are not full time students. (FYI: The directory is given and fixed)
What I've tried
I tried an npm start to the javascript folder but I have the following error when trying to run localhost:3000.
> student-portal-system#1.0.0 prestart C:\Users\User\Desktop\Assignment\javascript
> npm run start:services && npm run build
> student-portal-system#1.0.0 start:services C:\Users\User\Desktop\Assignment\javascript
> docker-compose up -d
'docker-compose' is not recognized as an internal or external command, operable program or batch file.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! student-portal-system#1.0.0 start:services: `docker-compose up -d`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the student-portal-system#1.0.0 start:services script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\User\AppData\Roaming\npm-cache\_logs\2020-09-13T15_27_31_396Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! student-portal-system#1.0.0 prestart: `npm run start:services && npm run build`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the student-portal-system#1.0.0 prestart script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
In javascript directory(package.json)
{
...
"scripts": {
"test": "jest",
"build": "babel src --out-dir build",
"prestart": "npm run start:services && npm run build",
"start": "node ./build/server.js",
"prestart:dev": "npm run start:services ",
"start:dev": "nodemon --exec babel-node src/server.js",
"start:services": "docker-compose up -d",
"lint": "eslint \"src/**/*.js\""
and so on...
In external directory(package.json)
{
...
"scripts": {
"test": "jest",
"build": "babel src --out-dir build",
"prestart": "npm run build",
"start": "node ./build/server.js",
"start:dev": "nodemon --exec babel-node src/server.js",
"lint": "eslint \"src/**/*.js\""
... and so on ...
Would be great anyone could give some tips on how to resolve the errors or correct me whether I am running the application correctly. Appreciate it!
Seems like you do not have docker installed on your windows.
Check this https://docs.docker.com/docker-for-windows
But I am not sure that if you install just docker, the docker-compose will be also installed, in that case
you would need also install https://docs.docker.com/compose/install/ there is a Tab for installing it on windows.
Also I am not sure if you have a typo in docker-compose.yml file, I see that there is
docker.compose.yml filename which is wrong.

Heroku npm start starts from different location

I have a fully functional NodeJs application with a submodule bundled inside it, so the submodule is the main application, and the other node project is built upon it.
I would like to run the submodule (the inner application) from the outer application. It might sound strange, but this is really what I would like to achieve.
It works fine when I run it in a local environment, but I can not make it work on Heroku.
Locally I run it with the command: heroku local web
My Procfile: web: npm run startwithouteslint
My outer package.json:
{
"name": "chatgine-pension",
"version": "1.0.0",
"description": "Chatgine-pension application",
"engines": {
"node": "10.x"
},
"main": "chatiety-engine/index.js",
"scripts": {
"startwithouteslint": "npm run startwithouteslint --prefix chatiety-engine",
"start": "eslint \"**/*.js\" && npm start --prefix chatiety-engine",
"test": "eslint \"**/*.js\" && mocha test --recursive --exit",
"coverage": "eslint \"**/*.js\" && nyc --reporter=text mocha test --recursive --exit"
},
"dependencies": {},
"devDependencies": {},
"repository": {},
"keywords": [],
"license": "custom"
}
My inner package.json (inside chatiety-engine folder):
{
"name": "chatiety-engine",
"version": "1.0.0",
"description": "Chatiety-engine application",
"engines": {
"node": "10.x"
},
"main": "index.js",
"scripts": {
"startwithouteslint": "node index.js",
"start": "eslint \"**/*.js\" && node index.js",
"test": "eslint \"**/*.js\" && mocha test --recursive --exit",
"coverage": "eslint \"**/*.js\" && nyc --reporter=text mocha test --recursive --exit"
},
"dependencies": {},
"devDependencies": {},
"repository": {},
"keywords": [],
"license": "custom"
}
Structure of the project:
The error message from Heroku:
2019-11-25T16:43:45.727225+00:00 heroku[web.1]: Starting process with command `npm run startwithouteslint`
2019-11-25T16:43:48.223968+00:00 app[web.1]:
2019-11-25T16:43:48.223991+00:00 app[web.1]: > chatgine-pension#1.0.0 startwithouteslint /app
2019-11-25T16:43:48.223993+00:00 app[web.1]: > npm run startwithouteslint --prefix chatiety-engine
2019-11-25T16:43:48.223995+00:00 app[web.1]:
2019-11-25T16:43:48.559728+00:00 app[web.1]: npm ERR! code ENOENT
2019-11-25T16:43:48.560276+00:00 app[web.1]: npm ERR! syscall open
2019-11-25T16:43:48.560632+00:00 app[web.1]: npm ERR! path /app/chatiety-engine/package.json
2019-11-25T16:43:48.563785+00:00 app[web.1]: npm ERR! errno -2
2019-11-25T16:43:48.563789+00:00 app[web.1]: npm ERR! enoent ENOENT: no such file or directory, open '/app/chatiety-engine/package.json'
2019-11-25T16:43:48.563792+00:00 app[web.1]: npm ERR! enoent This is related to npm not being able to find a file.
2019-11-25T16:43:48.563793+00:00 app[web.1]: npm ERR! enoent
2019-11-25T16:43:48.570839+00:00 app[web.1]:
2019-11-25T16:43:48.571073+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2019-11-25T16:43:48.571158+00:00 app[web.1]: npm ERR! /app/.npm/_logs/2019-11-25T16_43_48_563Z-debug.log
2019-11-25T16:43:48.578800+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2019-11-25T16:43:48.579173+00:00 app[web.1]: npm ERR! errno 254
2019-11-25T16:43:48.580465+00:00 app[web.1]: npm ERR! chatgine-pension#1.0.0 startwithouteslint: `npm run startwithouteslint --prefix chatiety-engine`
2019-11-25T16:43:48.580626+00:00 app[web.1]: npm ERR! Exit status 254
2019-11-25T16:43:48.580875+00:00 app[web.1]: npm ERR!
2019-11-25T16:43:48.581043+00:00 app[web.1]: npm ERR! Failed at the chatgine-pension#1.0.0 startwithouteslint script.
2019-11-25T16:43:48.581209+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2019-11-25T16:43:48.587148+00:00 app[web.1]:
2019-11-25T16:43:48.587357+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2019-11-25T16:43:48.587493+00:00 app[web.1]: npm ERR! /app/.npm/_logs/2019-11-25T16_43_48_581Z-debug.log
2019-11-25T16:43:48.666923+00:00 heroku[web.1]: State changed from starting to crashed
2019-11-25T16:43:48.642599+00:00 heroku[web.1]: Process exited with status 254
It seems like Heroku appends the /app at the beginning of the path but I have no idea why, and where could I turn it off.
EDIT: I was able to list all the environment variables used by Heroku, and two of those are very likely to cause the problem:
PWD=/app
HOME=/app
So far so good, but I can not override these env. variables. Do you have any idea how could I achieve this?
Thanks for any help in advance!
I was having the same problem. Just realize that my code was crashing. You have to fix the bug on your code, then this message "npm run startwithouteslint" will disappear. You can run "npm run start" in your terminal and some clues of your errors it will be on the screen.

vuejs app deploy to aws with eb cli. Error on instance Following services are not running: application

I have a vuejs app that I am trying to deploy to aws via elastic beanstalk cli. I get the error Following services not running: application and I'm not sure what that means. when I look at the logs I get
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the start script 'node build/dev-server.js'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the ntertainus package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node build/dev-server.js
This is the first time I have tried to use the cli and hoping someone can help me out I would appreciate that a lot
here is my the part of the package.json file that I think is failing
"scripts": {
"dev": "npm start",
"start": "node build/dev-server.js",
"build": "node build/build.js",
"unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs"
},

babel-node is not getting installed on Heroku

I'm using babel-node for ES6 syntax on Heroku, but I get a build error when I deploy. It says "babel-node: not found". I've tried a clean install on my local computer and it works perfectly. Package.json:
{
"name": "secret",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "./node_modules/.bin/babel-node ./bin/www"
},
"engines": {
"node": "7.5.0",
"npm": "5.0.3"
},
"dependencies": {
"babel-cli": "^6.24.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
...
}
}
I appreciate your help! :)
2017-07-17T11:02:26.997876+00:00 heroku[web.1]: State changed from crashed to starting
2017-07-17T11:02:31.839278+00:00 heroku[web.1]: Starting process with command `npm start`
2017-07-17T11:02:38.074157+00:00 heroku[web.1]: State changed from starting to crashed
2017-07-17T11:02:38.062607+00:00 heroku[web.1]: Process exited with status 1
2017-07-17T11:02:37.865774+00:00 app[web.1]:
2017-07-17T11:02:37.865786+00:00 app[web.1]: > secret#0.0.0 start /app
2017-07-17T11:02:37.865787+00:00 app[web.1]: > babel-node ./bin/www
2017-07-17T11:02:37.865787+00:00 app[web.1]:
2017-07-17T11:02:37.936361+00:00 app[web.1]: sh: 1: babel-node: not found
2017-07-17T11:02:37.966452+00:00 app[web.1]: npm ERR! file sh
2017-07-17T11:02:37.966683+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2017-07-17T11:02:37.966931+00:00 app[web.1]: npm ERR! errno ENOENT
2017-07-17T11:02:37.967106+00:00 app[web.1]: npm ERR! syscall spawn
2017-07-17T11:02:37.967287+00:00 app[web.1]: npm ERR! secret#0.0.0 start: `babel-node ./bin/www`
2017-07-17T11:02:37.967430+00:00 app[web.1]: npm ERR! spawn ENOENT
2017-07-17T11:02:37.967588+00:00 app[web.1]: npm ERR!
2017-07-17T11:02:37.967733+00:00 app[web.1]: npm ERR! Failed at the secret#0.0.0 start script.
2017-07-17T11:02:37.967873+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2017-07-17T11:02:37.969151+00:00 app[web.1]:
2017-07-17T11:02:37.969374+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2017-07-17T11:02:37.969484+00:00 app[web.1]: npm ERR! /app/.npm/_logs/2017-07-17T11_02_37_957Z-debug.log
2017-07-17T11:25:52.044791+00:00 heroku[web.1]: State changed from crashed to starting
2017-07-17T11:25:54.841341+00:00 heroku[web.1]: Starting process with command `npm start`
2017-07-17T11:25:57.407691+00:00 heroku[web.1]: Process exited with status 1
2017-07-17T11:25:57.413873+00:00 heroku[web.1]: State changed from starting to crashed
2017-07-17T11:25:57.310176+00:00 app[web.1]:
2017-07-17T11:25:57.310190+00:00 app[web.1]: > secret#0.0.0 start /app
2017-07-17T11:25:57.310191+00:00 app[web.1]: > babel-node ./bin/www
2017-07-17T11:25:57.310192+00:00 app[web.1]:
2017-07-17T11:25:57.316940+00:00 app[web.1]: sh: 1: babel-node: not found
2017-07-17T11:25:57.335019+00:00 app[web.1]: npm ERR! file sh
2017-07-17T11:25:57.335287+00:00 app[web.1]: npm ERR! code ELIFECYCLE
2017-07-17T11:25:57.335517+00:00 app[web.1]: npm ERR! errno ENOENT
2017-07-17T11:25:57.335735+00:00 app[web.1]: npm ERR! syscall spawn
2017-07-17T11:25:57.335933+00:00 app[web.1]: npm ERR! secret#0.0.0 start: `babel-node ./bin/www`
2017-07-17T11:25:57.336095+00:00 app[web.1]: npm ERR! spawn ENOENT
2017-07-17T11:25:57.336280+00:00 app[web.1]: npm ERR!
2017-07-17T11:25:57.336449+00:00 app[web.1]: npm ERR! Failed at the secret#0.0.0 start script.
2017-07-17T11:25:57.336614+00:00 app[web.1]: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
2017-07-17T11:25:57.337985+00:00 app[web.1]:
2017-07-17T11:25:57.338232+00:00 app[web.1]: npm ERR! A complete log of this run can be found in:
2017-07-17T11:25:57.338379+00:00 app[web.1]: npm ERR! /app/.npm/_logs/2017-07-17T11_25_57_323Z-debug.log
babel-node is "not meant for production use". There is a more relevant guide here for using #babel/cli, #babel/core and #babel/preset-env.
The babel dependencies should all be installed as devDependencies and you should transpile your code during in a build script run before Heroku prunes the devDependencies. See this guide
If you move all of your es6 code into a common directory like src at the top level of your app, you can create a build script to transpile everything in that directory to an output directory like build.
"build": "npm run clean && npm run build-babel",
"build-babel": "./node_modules/.bin/babel -d ./build ./src",
"clean": "rm -rf build && mkdir build",
In the example above, the build script will be run automatically by Heroku. clean will create a new build directory, and build-babel will transpile the code and place it in the build directory. After this is completed, Heroku will prune the devDependencies, but you will no longer need Babel.
When Heroku calls start below, it will be running your transpiled code. You should no longer see sh: 1: babel-node: not found.
"scripts": {
"build": "npm run clean && npm run build-babel",
"build-babel": "./node_modules/.bin/babel -d ./build ./src",
"clean": "rm -rf build && mkdir build",
"start": "node ./build/bin/www"
},
One potential gotcha, Do not call build from your start script. If you do, the devDependencies will have been pruned and you will get the following
sh: 1: babel: not found
A little bit late, but here is what I think you are missing:
Step (1): npm install --save babel-cli babel-preset-env in terminal
Note on step 1: Do not save to dev as that will require you to set NPM_CONFIG_PRODUCTION=false
Step (2): You are not compiling anything to babel without adding in the babel boilerplate and or using a babelrc file. Easiest method is to make a .babelrc file in your main app folder, ie. same one your package.json is in and input the following:
{
"presets": ["env"]
}
Note on step 2: With the usage of the env preset you do not need the babel-preset-es2015, etc
Step (3): You can now run your code using babel-node, so in your case execute your start script, ie. ./node_modules/.bin/babel-node ./bin/www
I suggest reading through the NPM module if you need further guidance understanding the preset logic: https://www.npmjs.com/package/babel-preset-env
Furthermore, I would suggest using a process manager like pm2. This allows your node instance to keep alive if it crashes. The forever module used to do this but pm2 is way better. Here is an example of a start script inside your package.json:
"scripts": {
"start": "node ./node_modules/.bin/pm2 start main.json --attach --env production"
}
Procfile (note, I am using nginx but just npm start would work fine):
web: bin/start-nginx npm start
worker: node ./node_modules/.bin/pm2 start worker.json --attach
And here would be your main.json with args to use babel-node (note, keep instance to 1 and do not fork on a web dyno in Heroku):
main.json:
{
"name": "the_awesome",
"script": "app.js",
"instances": 1,
"exec_mode": "cluster"
}
worker.json:
{
"name": "worker",
"script": "/app/lib/worker.js"
}
(4) Add a require('babel-register') hook to your app.js and worker.js if you are using pm2 in cluster mode. If you are using pm2 not in cluster mode, or just not using pm2 then you can use babel-node directly to run your .js or es6 files
Finally, to check if babel-node is really installed you can do the following:
heroku run bash -a {name of your app}
ls ./node_modules/.bin //babel-node should be present
Good luck!

Resources