Это похоже на личные предпочтения стиля, но я бы просто использовал простой цикл for/of
и некоторые операторы if
вместо 3 промежуточных массивов.
const moduleList = {};
const files = require('fs').readdirSync(__dirname);
const jsExt = /.js$/i;
for (const filename of files) {
if (jsExt.test(filename)) {
const baseFilename = filename.slice(-3);
moduleList[baseFilename] = require(__dirname + '/' + baseFilename),
}
}
export default moduleList;
Комментарии:
- Создает объект регулярного выражения один раз, а не несколько раз
- Нет необходимости в
g
флаге для регулярного выражения - Используйте
filename.slice(-3)
для удаления известного расширения файла, поскольку .split('.')[0]
не делает 'Вы не можете получить строку после последнего .
, и Windows допускает несколько .
в имени файла. Кроме того, нет необходимости искать, где находится .
, как вы уже знаете, где оно находится, поскольку это известное расширение. - Только один массив создан из
readdirSync()
, а не два дополнительных промежуточных массива - Массив повторяется только один раз вместо четырех.
- Нет никакого смысла в
try {...} catch(err) { throw err; }
, если вы не собираетесь помещать что-то еще в блок catch
. - Миксшаблонных литералов и добавление строк в __dirname + `/ $ {nextFileName}` не имеет смысла для меня. Используйте один или другой.
Если у вас есть причины хотеть, чтобы все символы были приватными, вы можете изменить его следующим образом:
export default (function() {
const moduleList = {};
const files = require('fs').readdirSync(__dirname);
const jsExt = /.js$/i;
for (const filename of files) {
if (jsExt.test(filename)) {
const baseFilename = filename.slice(-3);
moduleList[baseFilename] = require(__dirname + '/' + baseFilename),
}
}
return moduleList;
})();