NPM installiert keine Modulabhängigkeiten, wenn eine Grunt-App in heroku bereitgestellt wird

8

Ich habe mit grunt eine statische Seite erstellt. Ich versuche nun, es mit dem heroku buildpack für Knoten-Grunt auf Heroku zu verteilen.

Unten ist ein Bild von meinem Wurzelverzeichnis:

Hier ist mein Gruntfile, package.json & amp; Procfile:

Ссылка
Ссылка
    Web: Knoten index.html

Wenn ich $ git push heroku master bekomme, kommt es zur Gruntdatei und schlägt fehl:

%Vor%

Die obigen Fehler führen zur Auflistung aller lokalen NPM-Module als nicht gefunden. Wenn ich alle loadNpmTasks auflistet, anstatt "load-grunt-tasks" zu verwenden, bekomme ich genau den gleichen Fehler.

Wenn ich $ heroku logs bekomme, bekomme ich:

%Vor%

Kann jemand sehen, wo ich falsch gelaufen bin?

    
Callum Flack 19.12.2013, 12:41
quelle

3 Antworten

3

Für jeden, der hier vorbeikam, konnte ich das Problem nicht lösen. Dies ist, wo ich zu:

In meiner Gruntdatei habe ich npm-Module von devDependencies in Abhängigkeiten verschoben. Heroku konnte dann diese Abhängigkeiten installieren.

Wenn Heroku die Tasks ausgeführt hat, stoppt es jedoch bei der haml-Task mit dem Fehler "Sie müssen Ruby und Haml installiert haben und in Ihrem PATH, damit diese Task funktioniert". Hinzufügen von Rubin & amp; haml an die Gruntfile als Motoren nicht funktionierten.

    
Callum Flack 20.12.2013 23:34
quelle
2

Das einzige, was mir einfällt, ist, dass Heroku vielleicht zuerst Ihre devDependencies installiert, versucht, Grunt auszuführen, aber da% code_% noch nicht installiert wurde, erhalten Sie nicht die Zeile load-grunt-tasks (welche grunt.loadNpmTasks( 'grunt-contrib-uglify' ); tut das für Sie) und somit kann Grunt das Paket nicht finden.

Können Sie versuchen, Ihre load-grunt-tasks so zu ändern, dass alle npm-Module mit der Gruntfile -Methode explizit aufgelistet werden?

BEARBEITEN:

Ich erinnerte mich nur an eine andere Sache, die ich tun musste:

%Vor%

(Offensichtlich ersetzt grunt.loadNpmTasks() durch den Namen Ihrer Heroku-App.)

Damit lässt Heroku benutzerdefinierte Umgebungsvariablen zu und setzt den Server auf myapp . Versuchen Sie das und stellen Sie Ihre production und dependencies so ein, wie Sie sie ursprünglich hatten (nur um zu sehen, ob es funktioniert).

    
jakerella 19.12.2013 16:42
quelle
1

Ich komme ziemlich spät zum Spiel hier, aber ich habe ein paar Methoden verwendet und dachte, ich würde teilen.

Option 1: Erhalte Heroku zum Erstellen

Dies ist nicht meine Lieblingsmethode, weil es lange dauern kann, aber hier ist es sowieso.

Heroku führt npm install --production aus, wenn es Ihre gedrückten Änderungen empfängt. Dies installiert nur die Produktionsabhängigkeiten.

Sie müssen Ihre Umgebungsvariablen nicht ändern, um Ihre Dev-Abhängigkeiten zu installieren. npm install hat einen --dev -Schalter , um dies zu ermöglichen.

%Vor%

Heroku bietet einen Artikel darüber, wie Sie Ihren Build anpassen können . Im Wesentlichen können Sie den obigen Befehl als postinstall -Skript in Ihrer package.json ausführen.

%Vor%

Ich denke, das ist sauberer, als Dev-Abhängigkeiten in meinen Produktionsteil zu setzen oder die Umgebungsvariablen hin und her zu ändern, um meine Abhängigkeiten aufzubauen.

Außerdem verwende ich keine Procfile. Heroku kann Ihre Anwendung ausführen, indem Sie npm start aufrufen (zumindest kann es jetzt fast zwei Jahre nach dem OP). Solange Sie dieses Skript bereitstellen (wie oben gezeigt), sollte Heroku in der Lage sein, Ihre App zu starten.

Soweit es Ihre Ruby-Abhängigkeit betrifft, habe ich nicht versucht, ein Ruby-Juwel in meinen Knoten-Apps auf Heroku zu installieren, aber diese SO-Antwort schlägt vor, dass Sie multi buildpack verwenden .

Option 2: Stellen Sie Ihre Abhängigkeiten bereit

Einige argumentieren, dass es eine schlechte Form ist, wenn Heroku Ihre Anwendung erstellt. Sie schlagen vor, dass Sie alle Ihre Abhängigkeiten hochschieben sollten. Wenn Sie wie ich sind und die Idee hassen, Ihr node_modules -Verzeichnis einzuchecken, könnten Sie einen neuen Zweig erstellen, in dem Sie das node_modules -Verzeichnis erzwingen, und dann diesen Zweig bereitstellen. In git sieht das so aus:

%Vor%

Sie könnten dies natürlich zu einem Skript machen, damit Sie das nicht jedes Mal eingeben müssen.

Option 3: Mach alles selbst

Dies ist meine neue Lieblingsmethode zum Bereitstellen. Heroku hat Unterstützung für Slug-Bereitstellungen hinzugefügt. Der vorherige Link ist eine gute Lektüre und ich empfehle es sehr. Ich mache das in meinem automatisierten Build von Travis-CI . Ich habe ein paar benutzerdefinierte Skripts, um meine App zu tarnen und den Slug zu Heroku zu schieben, und es ist schnell.

    
carpenter 07.10.2015 18:02
quelle

Tags und Links