require() 在运行时,但它只运行一次。可以吗?

require() in a runtime but it runs only once. Is it ok?

我在他们的目录中有许多配置,它们响应不同的任务。但在某些情况下,我需要从另一个文件中获取配置。示例:

文件 1:

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

文件 2:

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
})

只需使用dotenv。这会更容易:))

动态调用require()没有错。根据文档,所有要求都被缓存。

file1 是否依赖于 file2?

如果没有,你为什么不能...

// 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')
}