Javascript 在NodeJS的构造函数中使用'require'是一种不好的做法吗?

Javascript 在NodeJS的构造函数中使用'require'是一种不好的做法吗?,javascript,json,node.js,require,Javascript,Json,Node.js,Require,我正在构建一个节点应用程序,其中需要特定的单词列表。单词列表位于一个JSON文件中,该文件如下所示: { “en”:[“foo”,“bar”], “gr”:[“foo”,“bar”] } JSON文件中的每个键代表不同的语言 用户在创建对象时必须选择一种语言。因此,我考虑在构造函数中导入JSON文件,如下所示: const list=require('./config/lang.json')[lang] 其中lang是传递给构造函数的参数 这是坏习惯吗 我听人说过,在代码的开头应该始终使用r

我正在构建一个节点应用程序,其中需要特定的单词列表。单词列表位于一个JSON文件中,该文件如下所示:

{
“en”:[“foo”,“bar”],
“gr”:[“foo”,“bar”]
}
JSON文件中的每个键代表不同的语言

用户在创建对象时必须选择一种语言。因此,我考虑在构造函数中导入JSON文件,如下所示:

const list=require('./config/lang.json')[lang]
其中lang是传递给构造函数的参数

这是坏习惯吗


我听人说过,在代码的开头应该始终使用
require
。我是否应该在代码
const list=require('./config/lang.json')
的开头要求全部内容,然后只提取构造函数中所需的语言
const wordlist=list[lang]

即使代码的工作原理相同,并且
require
调用也会被缓存。在您的情况下,不需要对每个新实例进行额外的函数调用,因此执行以下操作会更快(在本例中并不重要):

const langs = require('./config/lang.json');

class MyClass {
    constructor(lang) {
        const list = langs[lang];
    }
}
另一件需要注意的事情是,
require
是同步的,因此如果您的JSON特别大,那么第一次实例化
MyClass
时,事件循环将被阻塞。在一开始使用它时,它可能在服务器(或您正在做的任何事情)启动之前就已经加载了,因此
require
花费一些时间不会有任何问题

因此,是的,在我看来,
require
调用应该位于顶部,除非您知道自己在做什么,或者正在加载动态依赖项

这种做法不好吗

不太可能,
require
有一个缓存,所以这并不重要

我听人说过,在代码的开头应该始终使用require

是的,这是一个很好的实践,因此可以很容易地发现依赖关系

我是否应该在我的代码
const list=require('./config/lang.json')
的开头要求全部内容,然后只提取构造函数内部所需的语言
const wordlist=list[lang]


是的,我会那样做。如果它是一个动态依赖项,我只会将
require
放在构造函数中,比如
const wordlist=require(
/config/lang/${lang}.json

我需要它一次,一旦得到参数就使用变量