有没有更好的方法来访问package.json中的数组数据

时间:2018-05-01 19:53:51

标签: javascript json node.js package.json

我的package.json中有一小段配置:

{
    "name": "who-rules-app",
    "config": {
        "foo": "bar",
        "words": [
            "tpr",
            "rules"
        ]
    },
    "scripts": {
        "start": "node src/index.js"
    }
}

据我所知,人们通常使用config访问process.env['npm_package_${keyname}']密钥,例如:

process.env['npm_package_config_foo']
//> "bar"

但是当值是一个数组时,你会得到一组扁平的数字键:

process.env['npm_package_config_words_0']
//> "tpr"
process.env['npm_package_config_words_1']
//> "rules"

我总是可以使用fs从磁盘上读取文件,但我的理解是通过process.env做事允许这些东西与环境变量交互,这是处理配置的一种非常好的方法跨越不同的环境。

理想情况下,我想:

process.env['npm_package_config_words']
//> [ "tpr", "rules" ]

有更好的方法吗?那里有经过充分测试的模块吗?一个很酷的模式?

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

而不是使用什么基本上是process.env hack,任何最新版本的Node都会很乐意开箱即用地加载.json文件,所以只需编写如下内容:

let package = require('./package.json');
let config = package.config || {};
let words = config.words || [];

这就是你应该做的所有事情。

答案 1 :(得分:1)

我正在使用dotenv包作为环境变量。

  

Dotenv是一个零依赖模块,用于加载环境变量   从.env文件到process.env

在你的config.js

require('dotenv').config()

.env文件

DB_HOST=localhost
DB_USER=root
DB_PASS=s1mpl3

您可以像

一样使用它们
const db = require('db')
db.connect({
  host: process.env.DB_HOST,
  username: process.env.DB_USER,
  password: process.env.DB_PASS
})