在NodeJS中的构造函数中使用`require`是不好的做法吗?

Nic*_*lis 2 javascript json require node.js

我正在构建一个节点应用程序,其中需要一个单词列表.wordlist在JSON文件中,如下所示:

 { 
   "en":["foo", "bar"],
   "gr": ["foo", "bar"]
 }
Run Code Online (Sandbox Code Playgroud)

JSON文件中的每个键代表不同的语言.

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

const list = require('./config/lang.json')[lang]
Run Code Online (Sandbox Code Playgroud)

其中lang是传递给构造函数的参数.

这是不好的做法吗?

我听说有人说你应该总是require在代码的开头使用.我应该只在代码的开头需要整个内容const list = require('./config/lang.json'),然后只const wordlist = list[lang]在构造函数中提取所需的语言吗?

Mar*_*nde 5

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

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

class MyClass {
    constructor(lang) {
        const list = langs[lang];
    }
}
Run Code Online (Sandbox Code Playgroud)

另一件需要注意的事情是,它require是同步的,所以如果你的JSON特别大,那么你第一次实例化MyClass事件循环就会被阻塞.在开始时使用它可能已经在服务器(或者你正在做的任何事情)开始之前加载,所以require花费一些时间就没有问题了.

所以,是的,在我看来,require除非你知道你正在做什么,或者你正在加载一个动态依赖,否则调用应该在顶部.