Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I compile Typescript at Heroku postinstall?

Instead of uploading the precompiled dist directory, I want to compile src at server side instead.

Here are my scripts inside package.json:

"scripts": {
    "test": "echo \"No test specified\" && exit 0",
    "start": "node dist/app.js",
    "postinstall": "tsc"
  }

Here are the dependencies:

"dependencies": {
    "@types/express": "^4.11.1",
    "@types/pg": "^7.4.4",
    "@types/socket.io": "^1.4.31",
    "body-parser": "^1.18.2",
    "express": "^4.16.2",
    "pg": "^7.4.1",
    "socket.io": "^2.0.4",
    "tslint": "^5.9.1",
    "typescript": "^2.7.2"
  }

Since 'npm install will add the node_modules/.bin folder to the PATH environment variable during installation', Heroku should be able to call it directly.

But here is the error I get:

Building dependencies
       Installing node modules (package.json + package-lock)

       > [email protected] postinstall /tmp/build_afa42c7943d4b71d2b48a016ae3b9e50
       > tsc

       sh: 1: tsc: not found
       npm ERR! file sh
       npm ERR! code ELIFECYCLE
       npm ERR! errno ENOENT
       npm ERR! syscall spawn
       npm ERR! [email protected] postinstall: `tsc`
       npm ERR! spawn ENOENT
       npm ERR!
       npm ERR! Failed at the [email protected] postinstall 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!     /tmp/npmcache.LTxbD/_logs/2018-02-25T10_36_06_374Z-debug.log
-----> Build failed
like image 239
Talha Talip Açıkgöz Avatar asked Feb 25 '18 10:02

Talha Talip Açıkgöz


1 Answers

You need to call tsc from an npm script. Otherwise Heroku tries to find a global dependency named tsc.

Create a new npm script in your package.json:

"tsc": "tsc"

now replace "postinstall": "tsc" with:

"postinstall": "npm run tsc"
like image 149
Shane Avatar answered Nov 02 '22 18:11

Shane