2016-07-24 23 views
1

Bei der Bereitstellung unter Modulus.io (dies gilt wahrscheinlich auch für andere PAAS) installieren sie die erforderlichen Pakete aus der Datei packages.json. Im Rahmen des Installationsprozesses können auch einige npm-Skripte aufgerufen werden. Zum Beispiel postinstall. Diese Skripts können jedoch möglicherweise nicht in der Produktion ausgeführt werden (oder nicht ausgeführt werden). Sei es wegen Skripten, die nur lokal verfügbar sind oder bei der Produktion keinen Sinn ergeben.Ignorieren von Npm-Scripts bei der Bereitstellung nach PAAS/Modul

Wie kann ich die Umgebung erkennen und bestimmte npm-Skripte ausführen oder nicht ausführen? Kann ich auf das Objekt process.env zugreifen und die Skripte entsprechend handhaben oder gibt es einen besseren Weg?

Antwort

3

Leider können Sie nicht in Ihrem package.json Skript nur für bestimmte Umgebung definieren.

Angenommen, Sie haben einen postinstall Skript wie folgt erklärt in package.json:

{ 
    "scripts": { 
    "postinstall": "node postInstall.js" 
    }, 
} 

Der "easy" Weg wäre, um Ihre Logik in Bezug auf die Umwelt in diesem postInstall.js Skript hinzuzufügen:

if (process.env.NODE_ENV === 'production') { 
    // Do not run in production 
    process.exit(1); 
} 

Wenn Sie in der production-Umgebung ausgeführt werden, weisen Sie Node.js an, den Prozess so schnell wie möglich mit dem angegebenen Exit-Co zu beenden zum Beispiel.

Sie könnten auch, wenn Sie mehrere Skripte im postinstall Hook ausführen, alle Ihre Skripte in einem Wrapper mit demselben Mechanismus zum Beenden bestimmter Umgebungen verschieben, wenn nicht, führt alle anderen Skripte aus.

Ein weiterer Ansatz, wenn Sie immer auf Unix-Systemen laufen direkt über die Node.js Umgebung zu überprüfen ist ein Bash condition:

{ 
    "scripts": { 
    "postinstall": "[ \"$NODE_ENV\" != production ] && node postInstall.js" 
    }, 
} 

In diesem Fall, wenn die Knoten Umgebung nicht production ist, dann sind Sie‘ Führen Sie Ihr postInstall.js Skript erneut aus. Sie können es an andere Bedingungen wie nur in development, etc. anpassen.

+0

Danke für den Hinweis mit '$ NODE_ENV'. Ich musste es leicht ändern, da es einen Exit-Status "1" zurückgeben würde und somit die weitere Ausführung beim Deployment anhalten würde. Es funktioniert, wenn die Bedingung wie folgt negiert "postinstall": "[\" $ NODE_ENV \ "= Produktion] || someCmd" '. – str