指挥官加,喘着气



我正在用commander-plus编写一个节点命令行工具。

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);
});

不确定它是否符合答案,但我找到了使用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不会失败,但是额外的if检查的原因是我担心。env可能被意外部署。

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

显然gulp-bg是一个工作选项。这样,我们仍然可以继续使用gulp运行开发人员任务,并避免在生产环境中完全使用dotenv。

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

相关内容

  • 没有找到相关文章

最新更新