Commander-plus gulp
Commander-plus with gulp
我正在用 commander-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 脚本 运行 很好,但 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 的方法。只是没有 gulp.
首先我有一个类似于
的配置文件
// 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、modulusignore、.dockerignore)一起部署,这应该可以完成工作。
显然 gulp-bg 是一个可行的选项。有了它,我们仍然可以继续 运行 开发人员任务 gulp 并在生产中完全避免 dotenv。
import bg from 'gulp-bg';
import gulp from 'gulp';
gulp.task('cli', ['env'], bg('node', './src/cli'));
我正在用 commander-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 脚本 运行 很好,但 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 的方法。只是没有 gulp.
首先我有一个类似于
的配置文件// 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、modulusignore、.dockerignore)一起部署,这应该可以完成工作。
显然 gulp-bg 是一个可行的选项。有了它,我们仍然可以继续 运行 开发人员任务 gulp 并在生产中完全避免 dotenv。
import bg from 'gulp-bg';
import gulp from 'gulp';
gulp.task('cli', ['env'], bg('node', './src/cli'));