2014-04-09 10 views
35

Ich möchte, dass Heroku meine App erstellt, nachdem ich sie gedrückt habe, damit ich den Build-Ordner nicht jedes Mal hochschieben muss, wenn ich etwas ändere. Heroku installiert jedoch nur die Abhängigkeiten von package.json und grunt (mein Build-Tool) und alle seine Komponenten sind in devDependencies. Ich möchte sie dort behalten, wo sie hingehören. Was ist die Problemumgehung hier?DevDependencies auf Heroku installieren

+1

Könnten Sie ein benutzerdefiniertes Buildpack wie dieses verwenden? https://github.com/gcpantasis/heroku-buildpack-php-gruntjs – catsby

Antwort

63

Heroku installiert standardmäßig nur die Produktionsabhängigkeiten und ignoriert die Entwicklungsabhängigkeiten unter devDependencies.

Einstellen der npm Produktion Variable false der Trick:

heroku config:set NPM_CONFIG_PRODUCTION=false 

Weitere Infos bei der Heroku Node.js Support page zur Verfügung stehen.

+2

Dies setzt Ihre NODE_ENV auf Entwicklung, die Ihre App verlangsamen kann. – unblevable

+6

@unblevable Ich glaube nicht: '' ' -----> Node.js App erkannt -----> Erstellen von Laufzeitumgebung NPM_CONFIG_LOGLEVEL = Fehler NPM_CONFIG_PRODUCTION = false NODE_ENV = Produktion NODE_MODULES_CACHE = true '' ' – bithavoc

+2

Ich habe heroku config: set NPM_CONFIG_PRODUCTION = false und retarted Dyno und die Dev-Abhängigkeiten werden immer noch nicht installiert – Lev

2

KeepingNPM_CONFIG_PRODUCTIONtrue, benutzte ich Heroku's script hooks:

"scripts": { 
    ... 
    "heroku-prebuild": "export NPM_CONFIG_PRODUCTION=false; export NODE_ENV=; NPM_CONFIG_PRODUCTION=false NODE_ENV=development npm install --only=dev --dev", 
    "heroku-postbuild": "export NPM_CONFIG_PRODUCTION=true; export NODE_ENV=production;", 
    ... 
}, 

(Endlich) für mich gearbeitet.

1
scripts": { 
    ... 
    "heroku-prebuild": "npm install --only=dev" 
} 

Das war genug für mich. Danke an PixnBits für den Hinweis auf Heroku-Prebuild. Auch - mein Problem war mit Babel. Am Ende habe ich babel-preset-es2015 und andere Presets in Abhängigkeiten verschoben, sonst hat sich babel über Presets beschwert.

Update: 8/11/2017 Ich habe Probleme damit. Es sieht so aus, als hätten sich die Dinge geändert (und npm ist jetzt auf 5.3). Aber was ich sehe, ist, dass das Skript heroku-prebuild ausgeführt wird, und dann wird das Skript nach der Installation ausgeführt (aber ich habe nur versucht, -dev zu installieren).

Also, was ich getan habe, dass funktioniert, ist einfach auszuführen:

heroku config:set NPM_CONFIG_PRODUCTION=false 

Und lassen Sie es auf diese Weise festgelegt. Ich würde eine bessere Lösung lieben.