簡體   English   中英

需要全局 scope 或本地 scope?

[英]Require in global scope or local scope?

要求節點模塊的正確方法是什么? 在全局 scope 中聲明模塊更准確/更易於理解,還是在本地 scope 中聲明模塊更准確/更易於理解?

例如,以下哪個最有意義:

全球的:

let dns = require('dns') // <-- Global scope declaration
function lookup(subdomain, domain){
    let fqdn
    if(subdomain == '@'){
        fqdn = domain
    } else {
        fqdn = `${subdomain}.${domain}`
    }
    dns.resolveTxt(fqdn, (err, records) => {
        if(records){
            console.log(records)
        } else {
            console.log("no recrods")
        }
    })
}

當地的:

function lookup(subdomain, domain){
    let dns = require('dns') // <-- Local scope declaration
    let fqdn
    if(subdomain == '@'){
        fqdn = domain
    } else {
        fqdn = `${subdomain}.${domain}`
    }
    dns.resolveTxt(fqdn, (err, records) => {
        if(records){
            console.log(records)
        } else {
            console.log("no recrods")
        }
    })
}

這是意見問題嗎? 如果是這樣,我很抱歉,我將刪除這個問題。

我希望改進我的代碼,以便其他人更容易理解它,我認為這個問題與該目的相關,因此不應將其視為一個固執己見的問題。

首先,小幅修正。 您的第一個示例不是全局 scope。 那是模塊 scope。 帶有位於模塊文件開頭的聲明的模塊 scope 是首選實現,原因如下:

  1. 它在啟動時加載(請參閱下面的文字了解為什么這樣做很好)。
  2. 將所有這些放在模塊文件的開頭清楚地在代碼中以一種易於查看的方式清楚地說明了您擁有哪些外部模塊依賴項,這對於將來返回此代碼進行維護的任何人(包括您)都很有用。
  3. 你在這個模塊中只require()這個模塊。 雖然緩存了模塊,但最好不要在每次要引用它時都調用require() 加載一次並使用保存的模塊引用。

關於上面的第 1 點, require()是阻塞和同步的,並且涉及訪問文件系統(第一次加載該文件時)。 您通常希望在服務器啟動時完成所有require()操作,因此在處理請求時不會發生阻塞操作。 而且,如果您從require()中得到任何錯誤(例如模塊安裝丟失或版本沖突或錯誤配置或缺少依賴項或類似的東西),您還希望這些在啟動時發生,而不是稍后它們更快地發生看到並更容易診斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM