javascript — динамически экспортировать модуль, читая все файлы в каталоге в Node.js

Динамический экспорт модуля путем чтения всех файлов в каталоге в Node.js

Это похоже на личные предпочтения стиля, но я бы просто использовал цикл 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; 

Комментарии:

  1. Создает объект регулярного выражения один раз, а не несколько раз
  2. Нет необходимости в флаге g на регулярном выражении
  3. Используйте filename.slice(-3) чтобы удалить известное расширение файла, потому что .split('.')[0] не возвращает вам строку после последней . и окна позволяет несколько . в имени файла. Кроме того, не нужно искать где . как вы уже знаете, где это, так как это известное расширение.
  4. Только один массив, созданный из readdirSync() а не два дополнительных промежуточных массива
  5. Массив повторяется только один раз, а не четыре раза.
  6. Нет смысла try {...} catch(err) { throw err; } try {...} catch(err) { throw err; } если вы не собираетесь помещать что-то еще в блок catch .
  7. Сочетание литералов шаблона и добавление строк в __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; })(); 
Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector