2012-01-14 69 views
51

我剛剛開始使用node.js,我對Python有一些經驗。在Python中,我可以檢查__name__變量是否設置爲"__main__",如果是,我會知道我的腳本正在直接運行。在這種情況下,我可以運行測試代碼或以其他方式直接使用模塊。我可以在node.js中知道我的腳本是直接運行還是由另一個腳本加載?

node.js中是否有類似的東西?

+0

[node.js相當於python的if \ _ \ _ name \ _ \ _ ==''_ _ _ _ main \ _ \ _']的可能重複(http://stackoverflow.com/questions/4981891/node- js-pythons-if-name-main) – 2015-06-14 21:03:17

回答

84

您可以使用module.parent來確定當前腳本是否由另一個腳本加載。

例如

a.js

if (!module.parent) { 
    console.log("I'm parent"); 
} else { 
    console.log("I'm child"); 
} 

b.js

require('./a') 

運行node a.js將輸出:

I'm parent 

運行node.b.js將輸出:

I'm child 
+0

絕對完美。也看起來比Python更乾淨 – Hubro 2012-01-14 18:37:20

+0

你也可以使用'module.main'類似 – Raynos 2012-01-14 18:45:31

+10

@Raynos我想你的意思是'require.main === module'(官方建議http://nodejs.org/api/ modules.html)。 – chbrown 2012-10-31 18:23:11

9

兩個選項!module.parentrequire.main === module工作。 如果您有興趣瞭解更多詳情,請閱讀my detailed blog post about this topic

+0

鏈接404的,但否則很好的信息。 – cchamberlain 2015-07-16 18:10:08

+1

感謝您的注意,修復了鏈接。 – 2015-07-17 16:16:03

34

接受的答案很好。我加入這一個從the official documentation的完整性:

訪問主模塊

當一個文件被從節點直接運行,require.main設置爲其module。這意味着,你可以判斷一個文件是否已直接通過測試

require.main === module 

對於文件"foo.js"如果通過node foo.js都跑,這將是true,但false如果require('./foo')運行。

由於module提供filename屬性(通常相當於__filename),可以通過檢查require.main.filename獲得當前應用程序的入口點。

相關問題