require () во время выполнения, но он запускается только один раз. Это нормально?

1

У меня есть много конфигов в их каталогах, которые отвечают за различные задачи. Но в некоторых случаях мне нужно получить конфигурацию из другого файла. Пример:

File1:

module.exports = Object.freeze({
  uid: 'uid',
  name: 'name',
  admin: 'admin',
  balance: 'balance',
  state: 'state',
  bet: 'bet',
  size: 'size',
  chance: 'chance',
  language: 'language'
})

File2:

module.exports = Object.freeze({
  url: 'mongodb://localhost:27017/',
  table: 'casino-db',
  row: 'users',
  user: require('/api/user/config')
})

Это нормально? Я слышал, что динамический вызов require() плох, потому что он работает иначе, чем вызов с самого начала файла.

Кто-то использует эту конфигурационную структуру?

  • 2
    В этом нет ничего плохого, он будет оценен только один раз. Все вызовы require() работают одинаково, и на самом деле он имеет внутренний кэш, чтобы предотвратить запуск зависимости более одного раза, поэтому последующие вызовы в основном сводятся к доступу к свойству объекта кеша.
Теги:
config

4 ответа

0
Лучший ответ

последующие вызовы require кэшируются под объектом require.cache. То, что вы делаете, хорошо, потому что вы экспортируете только объект. Так что он не пересчитывается после многих требований.

Если вы беспокоитесь об этом, вы можете просто сделать это:

const user = require('/api/user/config')
module.exports = Object.freeze({
  url: 'mongodb://localhost:27017/',
  table: 'casino-db',
  row: 'users',
  user
})
  • 0
    Это не верно. экспорт не переоценивается. Ничто на верхнем уровне модуля не будет выполнено повторно.
  • 0
    Да, я неправильно понял мою идею. Починил это !
Показать ещё 4 комментария
0

файл1 зависит от файла2?

если нет, то почему ты не можешь просто...

// file 1
module.exports = Object.freeze({
  uid: 'uid',
  name: 'name',
  admin: 'admin',
  balance: 'balance',
  state: 'state',
  bet: 'bet',
  size: 'size',
  chance: 'chance',
  language: 'language'
})

// file2
module.exports = Object.freeze({
  url: 'mongodb://localhost:27017/',
  table: 'casino-db',
  row: 'users'
})

// some index.js
module.exports = {
  file1: require('./file1'),
  file2: require('./file2')
}
0

В динамическом вызове require() нет ничего плохого. Согласно документам, все требования кешируются.

-2

Просто используйте дотенв. Будет проще :))

  • 0
    пожалуйста, просто отправив что-то не качество ответа

Ещё вопросы

Сообщество Overcoder
Наверх
Меню