2013-12-21 13 views
10

Wenn ich meinen Code zu OpenShift drücke, sieht es so aus, als ob es meine devDependencies installiert, die für immer dauert. Ich würde es wirklich lieben, es so einzurichten, dass es nur die dependencies installiert (indem es mit dem --production Flag läuft). Gibt es eine Möglichkeit, dies zu tun?Run npm install --production on OpenShift

Antwort

16

Sie können npm mit dem Flag --production installieren, indem Sie die Umgebungsvariable NPM_CONFIG_PRODUCTION auf "true" setzen.

Hier ist ein Beispiel, das für bestehende Anwendungen funktionieren sollte:

rhc env set NPM_CONFIG_PRODUCTION="true" 

Oder Sie diese Variable kann als Teil Ihrer ersten App erstellen Schritt:

rhc app create myapplication nodejs-0.10 NPM_CONFIG_PRODUCTION="true" 
+0

Ist das neu? Ich habe das nirgendwo gesehen ... – kentcdodds

+0

Es ist in der Openshift-Dokumentation angegeben: https://developers.openshift.com/en/node-j.s-environment- variables.html. Und außerdem funktioniert es! –

+0

Mit dem Optionsformular des Befehls ist es 'rhc app create -a meineAnwendung -t nodejs-0.10 --env NPM_CONFIG_PRODUCTION =" true "'. –

2

Es sieht so aus, als ob die einzige Lösung darin besteht, die Kassette selbst zu aktualisieren. Der Befehl npm install befindet sich im Ordner bin/control der Kassette. In der Zwischenzeit wurde es in der originating github repo at wshearn/openshift-origin-cartridge-nodejs behoben, so dass Sie nur von Github installieren können, anstatt den Quickstart zu verwenden.

+0

Danke für den Tipp John nicht installiert sind. Ich sehe im Github Repo, wo dieser Befehl passiert. Leider habe ich den Schnellstart installiert und es gibt keine bin/control Datei. Sie wissen nicht, wo ich die Änderung im Schnellstart machen könnte? – kentcdodds

+0

Ich bin mir nicht sicher, ob das das offizielle Repo ist. Es scheint, der Code zur Zeit auf RHcloud.com verwendet wird, ist https://github.com/openshift/origin-server/tree/master/cartridges/openshift-origin-cartridge-nodejs; es macht [versuchen NODE_ENV = Produktion einstellen] (https://github.com/openshift/origin-server/commit/97124748e41d01ace67df931908755f84ecfdbae), aber ich bin devDependencies trotzdem installiert sehen. –

3

einen Weg gefunden, um es in der Quelle anstatt während der App-Erstellung anzugeben. Der Vorteil (für mich) über ein env var ist, dass es für alle Möglichkeiten gilt, die App zu starten, einschließlich einer Schaltfläche "Auf OpenShift starten".

Eine .openshift/action_hooks/pre_build Datei:

#!/bin/bash 
# This makes npm not install devDependencies. 
echo 'Enabling npm production' 
echo 'production = true' >> $OPENSHIFT_REPO_DIR/.npmrc 

Das ist es! Ich habe getestet und es betrifft npm für diesen Build, und die .npmrc verschwindet, wenn Sie diesen Hook in Zukunft entfernen.

(Natürlich könnte ich dies auch erreichen, indem einfach ein .npmrc meinen Repo hinzufügen, aber tue nicht will die Menschen die Quelle Check-out beeinflussen und laufen npm install, nur, wie es auf Openshift arbeitet.)

2
  1. Erstellen Sie eine .npmrc Datei, in der sich der Ordner node_modules befindet.

  2. Öffnen Sie es mit Ihrem text-editor und fügen diese zu ihm:

    production = true

P. S. keine Semikolons oder andere Zeichen

Dadurch wird sichergestellt, dass devDependencies auf den OPENSHIFT Server