我正在构建一个节点应用程序,其中需要一个单词列表。 wordlist在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]
inside?
即使代码工作原理相同,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} .jsonqazxswpoi。