0

commander-plus で node cli ツールを作成しています。

import program from 'commander-plus';

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

そして、主に便利で.env変数をロードしているため、gulpタスクで実行したいのですが、開発時のみ.

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);
});
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 がすべての適切な .ignore (.gitignore、modulusignore、.dockerignore) と共にデプロイされていないことを確認する必要があります。

于 2016-10-28T13:06:12.453 に答える