2016-10-28 2 views
0

Ich schreibe ein Knoten-CLI-Tool mit Commander-Plus.Commander-Plus mit Schluck

import program from 'commander-plus'; 

const prompts = ['a', 'b', 'c']; 
program.choose(prompts, (index) => { 
    // never returns; 
}); 

und wollen es mit einem Schluck Aufgabe ausgeführt werden soll, vor allem wegen seiner günstigen und wir .env Variablen sind geladen, aber auf Entwicklung nur.

import env from 'gulp-env'; 
gulp.task('env',() => { 
    env(); 
}); 

Zuerst habe ich mit Schluck-Shell versucht. Ich benutze ein ähnliches Skript, um nodemon zu starten, was gut funktioniert. Das cli-Skript läuft gut, aber Commander-plus hört nicht auf die Tastatureingabe.

Später habe ich das gefunden, entweder so soll es funktionieren oder vielleicht ist es jetzt behoben.

Aber auch diese Schluck-Shell ist auf der schwarzen Liste, und dachte, mit gulp-exec oder child_process.exec stattdessen versuchen.

import { exec } from 'child_process'; 
gulp.task('cli', ['env'], done => { 
    exec('babel-node src/server/cli', done); 
}); 

Antwort

0

Offenbar gulp-bg ist eine funktionierende Option. Damit können wir weiterhin Entwickleraufgaben mit dem Schluck ausführen und vermeiden dotenv komplett in der Produktion.

import bg from 'gulp-bg'; 
import gulp from 'gulp'; 

gulp.task('cli', ['env'], bg('node', './src/cli')); 
0

Nicht sicher, ob es als eine Antwort qualifiziert, aber ich fand herum mit Node-Dotenv. Einfach ohne Schluck.

Zuerst habe ich eine Konfigurationsdatei, die

// only set default for env 
configExport.env = process.env.NODE_ENV || 'development'; 
// and a lot of other variables 

Und dann sowohl in meinem Server und cli Tool wie

aussieht ich die .env laden nur dann, wenn es gebraucht wird.

import dotenv from 'dotenv' 
import config from '../server/config'; 
if(config.env === 'development'){ 
    dotenv.load(); 
} 

dotenv wird nicht fehlschlagen, wenn .env Datei nicht gefunden wird, aber der Grund für den zusätzlichen, wenn Scheck, ist ich bin besorgt ein .env könnte zufällig eingesetzt bekommen.

Wir müssen auch sicherstellen, dass .env nicht mit allen geeigneten .ignores (.gitignore, modoignore, .dockerignore) bereitgestellt wird, und das sollte die Aufgabe erledigen.