2015-02-28 9 views
49

Ich möchte nicht die zusätzlichen Argumente NODE_ENV='production' gulp jedes Mal eingeben, wenn ich Schluck ausführen, um eine Umgebungsvariable festzulegen.Wie kann ich eine Umgebungsvariable als Schluckaufgabe festlegen?

Ich würde lieber die Umgebungsvariable aus dem Schluck über eine Aufgabe setzen.

Was wäre ein guter Weg, dies zu erreichen?

+2

verwenden Sie 'yargs' &' schluck-constatnt', um die Dateien zu generieren 'env' basiert auf Befehlszeilenargumenten – harishr

Antwort

110
gulp.task('set-dev-node-env', function() { 
    return process.env.NODE_ENV = 'development'; 
}); 

gulp.task('set-prod-node-env', function() { 
    return process.env.NODE_ENV = 'production'; 
}); 

verwenden Sie es wie:

gulp.task('build_for_prod', ['set-prod-node-env'], function() { 
    // maybe here manipulate config object 
    config.paths.src.scripts = config.paths.deploy.scripts; 
    runSequence(
     'build', 
     's3' 
    ); 
}); 
+9

Richtige Antwort, die zeigt, wie man einfache Aufgaben ohne übermäßige Abhängigkeiten erledigt –

+0

funktioniert das noch? Ich bin auf osx, wo es nicht ist :( – wegginho

+0

@wegginho ja, was ist dein Code? –

16

Versuchen gulp-env

Schnell Beispiel dafür, wie einige Umgebungsvariablen zu setzen, bevor die nodemon Aufgabe ausgeführt wird:

// gulpfile.js 

var gulp = require('gulp'); 
var nodemon = require('nodemon'); 
var env = require('gulp-env'); 

gulp.task('nodemon', function() { 
    // nodemon server (just an example task) 
}); 

gulp.task('set-env', function() { 
    env({ 
    vars: { 
     MONGO_URI: "mongodb://localhost:27017/testdb-for-british-eyes-only", 
     PORT: 9001 
    } 
    }) 
}); 

gulp.task('default', ['set-env', 'nodemon']) 
+1

Wenn ich das ausführe, bekomme ich 'MONGO_URI ist nicht definiert' – Dallin

+0

Der native Knotenweg ist wahrscheinlich der beste, wie in anderen Antworten zu diesem Beitrag gezeigt. 'return process.env.NODE_ENV = 'production';' – dman

2

können Sie auch festlegen eine standardmäßig, und lesen Sie die Variablen aus einer json Datei:

gulp.task('set-env', function() { 
    var envId = gutil.env.env; 
    if (!envId) { 
     envId = "dev"; 
    } 
    genv({ 
     file: "env." + envId + ".json" 
    }); 
}); 

Dies würde immer dev env standardmäßig sein und man könnte es eine andere env Einstellung nennen, wie folgt aus:

gulp --env prod

Mehr von gulp-env

6

Sie können auch definieren als ein Skript in Ihrem package.json

{ 
    "name": "myapp", 
    "scripts": { 
    "gulp": "NODE_ENV='development' gulp", 
    "gulp-build": "NODE_ENV='production' gulp" 
    }, 
    ... 
} 

Und führen Sie es mit npm run gulp-build. Dies hat einige Vorteile

  • Sie Argumente definieren können sie jedes Mal
  • Globale schluck Installation nicht erforderlich ist (auch für andere Werkzeuge, wie webpack)
  • Sie definieren können mehrere Varianten leicht statt Eingabe mit verschiedene Umgebungsvariablen und (oder) Argumente ohne Änderung der gulpfile (wie Sie oben sehen - Schluck und Schluck-Build für die Entwicklung bzw. Produktion)
+0

Große Antwort. Ich denke, es ist so wichtig zu versuchen, das zu nutzen, was Sie bereits haben, bevor Sie ein anderes Werkzeug in den Mix einführen! – Red2678

Verwandte Themen