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
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"
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.
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
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. –
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.)
Erstellen Sie eine
.npmrc
Datei, in der sich der Ordnernode_modules
befindet.Ö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
Ist das neu? Ich habe das nirgendwo gesehen ... – kentcdodds
Es ist in der Openshift-Dokumentation angegeben: https://developers.openshift.com/en/node-j.s-environment- variables.html. Und außerdem funktioniert es! –
Mit dem Optionsformular des Befehls ist es 'rhc app create -a meineAnwendung -t nodejs-0.10 --env NPM_CONFIG_PRODUCTION =" true "'. –