require()在运行时中,但仅运行一次。可以吗

时间:2018-12-23 00:01:25

标签: javascript node.js config

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

文件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()是不好的,因为它以另一种方式而不是从文件开头进行调用。

有人使用该配置结构吗?

4 个答案:

答案 0 :(得分:0)

后续的require调用被缓存在require.cache对象下。 您正在执行的操作还可以,因为您仅导出了一个对象。因此,在经过许多要求后,就不必重新计算了。

如果您担心的话,可以这样做:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:-2)

只需使用dotenv。它将变得更加容易:))