指挥官加上一口气

时间:2016-10-28 12:42:49

标签: node.js gulp gulp-shell node-commander

我正在使用commander-plus编写节点cli工具。

import program from 'commander-plus';

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

并希望使用gulp任务运行它,主要是因为它方便且我们正在加载.env变量,但仅在开发

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

起初我一直在尝试使用gulp-shell。我实际上使用类似的脚本来启动nodemon,这很好。 cli脚本运行得很好,但是commander-plus不会听键盘输入。

import shell from 'gulp-shell';
import gulp from 'gulp';

gulp.task('cli', ['env'], shell.task([
  'babel-node src/cli',
]))

后来我发现,无论是应该如何工作,还是现在修复它。 https://github.com/sun-zheng-an/gulp-shell/issues/10

但是gulp-shell也被列入黑名单,并且考虑尝试使用gulp-exec或child_process.exec。

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

2 个答案:

答案 0 :(得分:0)

不确定它是否有资格作为答案,但我找到了node-dotenv。没有一口气。

首先我有一个看起来像

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

然后在我的服务器和cli工具中,只有在需要时才加载.env。

import dotenv from 'dotenv'
import config from '../server/config';
if(config.env === 'development'){
  dotenv.load();
}
如果没有找到.env文件,dotenv不会失败,但如果检查额外的原因,我担心.env可能会被意外部署。

我们还需要确保.env没有部署所有适当的.ignore(.gitignore,modulusignore,.dockerignore),并且应该完成这项工作。

答案 1 :(得分:0)

显然gulp-bg是一个可行的选择。有了这个,我们仍然可以继续使用gulp继续运行开发人员任务,并完全避免将dotenv用于生产。

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

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