0

我正在用command-plus 编写一个node 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 脚本运行良好,但 command-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);
});
4

2 回答 2

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 不会失败,但额外 if 检查的原因是我担心 .env 可能会被意外部署。

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

于 2016-10-28T13:06:12.453 回答
0

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

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

gulp.task('cli', ['env'], bg('node', './src/cli'));
于 2016-10-31T14:16:51.163 回答