Это плохая практика использовать `require` внутри конструктора в NodeJS? - PullRequest
0 голосов
/ 05 июня 2018

Я создаю приложение для узла, где требуется определенный список слов.Список слов находится в файле 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] внутри конструктора?

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Это плохая практика?

Не совсем, require имеет кеш, поэтому это не имеет большого значения.

I 'Мы слышали, как люди говорят, что вы всегда должны использовать require в начале вашего кода.

Да, это хорошая практика, так что можно легко определить зависимости.

Должен ли я просто потребовать всего этого в начале моего кода const list = require('./config/lang.json'), а затем просто извлечь только необходимый язык const wordlist = list[lang] внутри конструктора?

Да, я бы это сделал.Я бы поместил require внутри конструктора, если бы это была динамическая зависимость, например const wordlist = require(. / Config / lang / $ {lang} .json ).

0 голосов
/ 05 июня 2018

Даже если код работает так же, и require вызовы кэшируются.В вашем случае нет необходимости в таком дополнительном вызове функции для каждого нового экземпляра, поэтому будет быстрее (не в данном случае это имеет значение) сделать следующее:

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

class MyClass {
    constructor(lang) {
        const list = langs[lang];
    }
}

Еще одна вещь, на которую следует обратить внимание,в том, что require является синхронным, поэтому, если ваш JSON особенно велик, при первом запуске MyClass цикл событий будет заблокирован.Используя его в самом начале, он, вероятно, загрузится до того, как сервер (или что бы вы ни делали) запустится, поэтому не будет никаких проблем с require, занимающим некоторое время.

Итак, да,по моему мнению, require вызовы должны быть наверху, если вы не знаете, что делаете, или загружаете динамическую зависимость.

...