12factor-config 中文文档教程

发布于 7年前 浏览 26 项目主页 更新于 3年前

12factor-config

一个只读取环境的配置模块。 对于 Node.js,这意味着 process.env

注意 1:我们永远不会在此处的任何示例中使用 NODE_ENV,因为每个环境 应该指定它需要的一切,没有什么应该依赖于特定的 环境(例如“开发”、“测试”、“暂存”或“生产”)。

注意 2:这个包被认为是稳定的,所以很少提交这些 日子没有不活跃的迹象,只是稳定。 请使用并提交 PR 以查找错误。 新的 功能也会被考虑。

Stability

请注意,该项目的功能非常齐全。 问题将得到解决。 新的 如有必要,可以添加功能。 否则它不会有更多的版本 - 但是 放心,我会支持它和你。 该项目并没有死,它只是在休息。

Synopsis

首先,设置一些您的程序将查找的环境变量。 你不需要 设置任何具有“默认”的,但您确实需要设置任何“必需”的。

$ export REDIS_URL=redis://user:password@hostname:port/db
$ export APPNAME_PORT=8080

然后,在您的程序中:

var config = require('12factor-config');

var cfg = config({
    redisUrl : {
        env      : 'REDIS_URL',
        type     : 'string', // default
        required : true,
    },
    logfile : {
        env      : 'APPNAME_LOG_FILE',
        type     : 'string',
        default  : '/var/log/appname.log',
        required : true,
    },
    port : {
        env      : 'APPNAME_PORT',
        type     : 'integer',
        default  : '8000',
        required : true,
    },
    debug : {
        env      : 'APPNAME_DEBUG',
        type     : 'boolean',
        default  : false,
    },
    env : {
        // you really shouldn't use this, but some people/packages do
        env      : 'NODE_ENV',
        type     : 'enum',
        values   : [ 'development', 'test', 'stage', 'production', ],
    },
});

console.log(cfg);

应该输出如下

{
  redisUrl: 'redis://user:password@hostname:port/db',
  logfile: '/var/log/appname.log',
  port: 8080,
  debug: false,
  env: 'development'
}

内容: 建议在您的环境变量前加上与您的应用程序相关的前缀 上面后面的配置变量中显示的名称。 这主要是为了给你的变量命名空间而不是踩踏 超过其他已经定义的。 当然,您不需要在本地名称中使用前缀。

Valid Values

当您具有某些类型时,会执行一些转换以从字符串中获取它(因为 environment 只包含 string) 到所需的值。

  • boolean - upper or lower case is allowed
    • true - 'true', 't', 'yes', 'y', 'on', '1'
    • false - 'false', 'f', 'no', 'n', 'off', '0'
    • any other value throws

What I Do

我通常有一个 lib/cfg.js,如下所示:

var config = require('12factor-config');

var cfg = config({
    // ... environment config here ...
});

module.exports = cfg;

通过这样做,应用程序中的所有其他文件都可以 require('lib/cfg.js')并获得 完全相同的配置。

Author

作者 Andrew Chilton - 推特

License

麻省理工学院 - http://chilts.mit-license.org/2013/

(完)

12factor-config

A config module which only reads the environment. For Node.js that means process.env.

Note 1 : We will not ever use NODE_ENV in any example here since each environment should specify everything it needs and nothing should be dependent on being a particular environment (such as 'development', 'testing', 'staging' or 'production').

Note 2 : This package is considered stable so the fact that there are few commits these days is no sign of inactivity, just stability. Please use and submit PRs for bugs. New features will be considered too.

Stability

Please note that this project is pretty much feature complete. Issues will be fixed. New features may be added if necessary. Otherwise it won't have very many more releases - but rest assured I will support it and you. The project is not dead, it is merely resting.

Synopsis

Firstly, set some environment variables that your program will look for. You don't need to set any that have a 'default' but you do need to set any that are 'required'.

$ export REDIS_URL=redis://user:password@hostname:port/db
$ export APPNAME_PORT=8080

Then, in your program:

var config = require('12factor-config');

var cfg = config({
    redisUrl : {
        env      : 'REDIS_URL',
        type     : 'string', // default
        required : true,
    },
    logfile : {
        env      : 'APPNAME_LOG_FILE',
        type     : 'string',
        default  : '/var/log/appname.log',
        required : true,
    },
    port : {
        env      : 'APPNAME_PORT',
        type     : 'integer',
        default  : '8000',
        required : true,
    },
    debug : {
        env      : 'APPNAME_DEBUG',
        type     : 'boolean',
        default  : false,
    },
    env : {
        // you really shouldn't use this, but some people/packages do
        env      : 'NODE_ENV',
        type     : 'enum',
        values   : [ 'development', 'test', 'stage', 'production', ],
    },
});

console.log(cfg);

Should output something like:

{
  redisUrl: 'redis://user:password@hostname:port/db',
  logfile: '/var/log/appname.log',
  port: 8080,
  debug: false,
  env: 'development'
}

It is advisable to prefix your environment variables with a prefix related to your application name as shown in the later config vars above. Mainly this is to namespace your vars and not stomp over others already defined. Of course you don't need to use the prefix in the local name.

Valid Values

When you have certain types, some transformations are performed to get it from a string (since the environment only contains string) into the required value.

  • boolean - upper or lower case is allowed
    • true - 'true', 't', 'yes', 'y', 'on', '1'
    • false - 'false', 'f', 'no', 'n', 'off', '0'
    • any other value throws

What I Do

I usually have a lib/cfg.js such as the following:

var config = require('12factor-config');

var cfg = config({
    // ... environment config here ...
});

module.exports = cfg;

By doing this, all other files in your application can just require('lib/cfg.js') and obtain the exact same configuration.

Author

Written by Andrew Chilton - Twitter.

License

MIT - http://chilts.mit-license.org/2013/

(Ends)

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文