3

我希望在浏览器中使用https://github.com/flatiron/nconf 。我曾尝试将它与 browserify 一起使用,但因为 nconf 在需要扫描目录以进行配置时调用 fs.readdirSync,所以它在浏览器中失败。

// config.js
'use strict';

var nconf = require('nconf'); // this triggers the fs.readdirSync

var globalConfig = { my: { global: 1 }};
nconf.use('global', { type: 'literal', store: globalConfig });

var envConfig = { my: { env: 2 }};
nconf.use('env', { type: 'literal', store: envConfig });

module.exports = nconf;

是否可以使用某种 browserify 转换(我没有看到强制在 nconf 中使用 BRFS 的方法)或使用 nconf(或其他类似库)来管理客户端配置的方法?

如果不是 nconf 本身,那么只是可以让我做类似的事情:

config.load('user-settings', { my : { user: 1 } });
config.load('global-settings', { my: { global: 2 } } );

config.get('my.user'); // 1
config.get('my.global'); // 2

config.unload('global-settings');

config.get('my.global'); // undefined
4

1 回答 1

0

我最近自己也遇到了这个问题。我决定把我自己的配置文件放在一起,而不是引入另一个库。这就是我最终得到的结果:

/*
 This file determines which environment we're in, and provides the app with the appropriate config
 */
export const defaults = {
  searchURI: 'http://www.google.com/',
  anotherURI: 'https://stackoverflow.com/',
};

export const dev = {
  searchURI: 'https://www.bing.com/',
};

export const test = {
  searchURI: 'https://www.yahoo.com/',
};

export const prod = {
  searchURI: 'https://duckduckgo.com/',
};

const config = () => {
  switch (process.env.YOUR_ENV_NAME) {
    case 'dev':
      return dev;
    case 'test':
      return test;
    default:
      return prod;
  }
};

export default {
  ...defaults,
  ...config(),
};

使用此模式,您可以像导入配置一样nconf

import config from './path/to/above/file.js';

const { searchURI, anotherURI } = config;
// OR
const searchURI = config.searchURI;
const anotherURI = config.anotherURI;
于 2020-06-02T21:54:53.770 回答