我剛剛開始使用node.js,我對Python有一些經驗。在Python中,我可以檢查__name__
變量是否設置爲"__main__"
,如果是,我會知道我的腳本正在直接運行。在這種情況下,我可以運行測試代碼或以其他方式直接使用模塊。我可以在node.js中知道我的腳本是直接運行還是由另一個腳本加載?
node.js中是否有類似的東西?
我剛剛開始使用node.js,我對Python有一些經驗。在Python中,我可以檢查__name__
變量是否設置爲"__main__"
,如果是,我會知道我的腳本正在直接運行。在這種情況下,我可以運行測試代碼或以其他方式直接使用模塊。我可以在node.js中知道我的腳本是直接運行還是由另一個腳本加載?
node.js中是否有類似的東西?
您可以使用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
兩個選項!module.parent
和require.main === module
工作。 如果您有興趣瞭解更多詳情,請閱讀my detailed blog post about this topic。
鏈接404的,但否則很好的信息。 – cchamberlain 2015-07-16 18:10:08
感謝您的注意,修復了鏈接。 – 2015-07-17 16:16:03
接受的答案很好。我加入這一個從the official documentation的完整性:
當一個文件被從節點直接運行,require.main
設置爲其module
。這意味着,你可以判斷一個文件是否已直接通過測試
require.main === module
對於文件"foo.js"
如果通過node foo.js
都跑,這將是true
,但false
如果require('./foo')
運行。
由於module
提供filename
屬性(通常相當於__filename
),可以通過檢查require.main.filename
獲得當前應用程序的入口點。
[node.js相當於python的if \ _ \ _ name \ _ \ _ ==''_ _ _ _ main \ _ \ _']的可能重複(http://stackoverflow.com/questions/4981891/node- js-pythons-if-name-main) – 2015-06-14 21:03:17