我正在使用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);
});
答案 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'));