2017-03-10 9 views
1

私のモジュールでは、コマンドラインから、または別のモジュールから呼び出されたときを検出する必要があります。NodeJS - コマンドライン(ES6 + Babel)から呼び出されたときを検出できますか?

const isFromCLI = '????' 

Iは、(ES6コードで)script.jsにハンドオフれ、バベル/ ES6を使用しているので、コマンドラインから呼び出された場合、index.jsは(バベルコードで)と呼ばれます。したがって、スクリプトファイルのmodule.parentmoduleindex.jsファイル)を返します。 だから使えないmodule.parent

また、コマンドラインまたは別のモジュールから呼び出された場合、module.mainundefinedscript.js)です。 だから使えないmodule.main

もの

は、他の人が示唆されている2つの解決策ですが、彼らは私のために動作しません。

はバベル/ ES6を使用している場合、これを検出することが簡単ですか..?

更新

require.main戻りmoduleコマンドラインのいずれかから、または別のモジュールから呼び出されます。

+0

あなたがコードを呼び出す方法をご提示ください。あなたが言うように、 'index.js'が' script.js'に渡すコマンドラインから呼び出された場合、 'script.js'はコマンドラインから直接呼び出されませんか?私にはうまく見えます。 – Bergi

+0

@Bergi正しいですが、 'script.js'はコマンドラインから直接呼び出されません。しかし、 'index.js'は' scriptに必要なBabelコードだけを含んでいます。jsは働く。私はあなたが何を言っているかを見ます。私は 'module.parent'が' module'と等しいかどうかを見るのではなく、これを検出する別の方法があると思いました。 –

答えて

1

あなたはノードでProcessを使用することができます。

https://nodejs.org/api/process.html#process_process_argv

二番目のパラメータ(含まれているタイプの試合を行う)の値を確認してください。これはしかし、それはあなたが必要なものを達成するためにまっすぐ進む方法です

唯一の方法であるかどうかわからコードスニペットはあるかもしれないではない:

const isFromCLI = (process.argv[1].indexOf('my-script.js') !== -1); 
+0

これはうまくいきます、2番目の要素は実行されているjsファイルへのパスです。これはちょっとした問題ですが、うまくいきます。 –

0

あなたはNode Environment Variablesを使用することができます。

あなたは、このような環境変数を設定することができます。

CLI=true node app.js

をしてから、このような環境変数を取得:

const isFromCLI = process.env.CLI === 'true'

注:process.env.CLIは文字列になります。

更新:

あなたがnode app.js --cliのような何かをしたい場合は、以下の操作を行うことができます

let isFromCLI 

process.argv.forEach(function (val, index, array) { 
    if (array[index] === '--cli') { 
    isFromCLI = true 
    } 
}) 

console.log(isFromCLI) 
+0

これはうまくいくでしょうが、理想的には私がコマンドラインで使っているものを変更しないようにしたいのです。 cliオプション 'node app.js --cli'を簡単に追加することができます。 –

+0

@StephenLast、更新されました。 –

関連する問題