У меня есть много конфигов в их каталогах, которые отвечают за различные задачи. Но в некоторых случаях мне нужно получить конфигурацию из другого файла. Пример:
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()
плох, потому что он работает иначе, чем вызов с самого начала файла.
Кто-то использует эту конфигурационную структуру?
последующие вызовы require кэшируются под объектом require.cache. То, что вы делаете, хорошо, потому что вы экспортируете только объект. Так что он не пересчитывается после многих требований.
Если вы беспокоитесь об этом, вы можете просто сделать это:
const user = require('/api/user/config')
module.exports = Object.freeze({
url: 'mongodb://localhost:27017/',
table: 'casino-db',
row: 'users',
user
})
файл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')
}
В динамическом вызове require()
нет ничего плохого. Согласно документам, все требования кешируются.
Просто используйте дотенв. Будет проще :))
require()
работают одинаково, и на самом деле он имеет внутренний кэш, чтобы предотвратить запуск зависимости более одного раза, поэтому последующие вызовы в основном сводятся к доступу к свойству объекта кеша.