2017-03-10 17 views
1

在我的模塊中,我需要檢測它是從命令行還是從另一個模塊調用。NodeJS - 我可以檢測何時從命令行(ES6 +巴別)調用..?

const isFromCLI = '????' 

我使用巴別/ ES6,所以從一個命令行調用時,index.js被調用(與巴別碼),它把手拿開,以script.js(與ES6代碼)。所以從腳本文件中,module.parent返回moduleindex.js文件)。 所以我不能使用module.parent

另外,module.mainundefined(在script.js)從命令行或從另一個模塊調用時。 所以我不能使用module.main

這些是別人提出的兩種解決方案,但它們不適合我。

使用Babel/ES6時有沒有簡單的檢測這個?

更新

require.main返回module從任一命令行或從另一個模塊調用時。

+0

請告訴我們你是如何調用的代碼。如果像你說的那樣,'index.js'是從命令行中調用的,而這個命令行指向'script.js',那麼'script.js'不會直接從命令行調用?對我來說似乎很好。 – Bergi

+0

@Bergi你是對的,'script.js'不是直接從命令行調用的。但是'index.js'只包含腳本所需的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

這是行不通的,第二個元素是正在執行的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,更新。 –

相關問題