如何在打字稿中使用node-config?

时间:2018-06-12 09:21:58

标签: node.js typescript node-config

安装node-config@types/config后:

yarn add config
yarn add --dev @types/config

按照lorenwest/node-config

中的说明添加配置
// default.ts
export default {
  server: {
    port: 4000,
  },
  logLevel: 'error',
};

当我尝试在我的应用中使用时:

import config from 'config';

console.log(config.server);

我收到错误:

src/app.ts(19,53): error TS2339: Property 'server' does not exist on type 'IConfig'.

6 个答案:

答案 0 :(得分:5)

我采用的方法稍有不同-在JavaScript中定义变量,然后在TypeScript中访问它们。

使用以下文件夹结构:

├── config
│   ├── custom-environment-variables.js
│   ├── default.js
│   ├── development.js
│   └── production.js
└── server
    ├── config.ts
    └── main.ts

我在根config/文件夹中定义配置。例如:

// config/default.js
module.exports = {
  cache: false,
  port: undefined  // Setting to undefined ensures the environment config must define it
};

// config/development.js
module.exports = {
  port: '3000'
}

// config/production.js
module.exports = {
  cache: true
}

// config/custom-environment-variables.js
module.exports = {
  port: 'PORT'
}

现在,在TypeScript领域中,我定义一个接口以提供更好的自动完成和文档,并编写一些桥接代码以将配置从node-config拉入我的配置映射:

// server/config.ts
import nodeConfig from 'config';

interface Config {
  /** Whether assets should be cached or not. */
  cache: boolean;

  /** The port that the express server should bind to. */
  port: string;
}

const config: Config = {
  cache: nodeConfig.get<boolean>('cache'),
  port: nodeConfig.get<string>('port')
};

export default config;

最后,我现在可以在任何TypeScript代码中导入并使用配置变量。

// server/main.ts
import express from 'express';
import config from './config';

const { port } = config;

const app = express();

app.listen(port);

此方法具有以下优点:

  • 我们可以使用node-config提供的丰富且经过考验的功能,而无需重新发明轮子
  • 我们有一个类型明确,文档齐全的配置图,可以从TS代码内的任何位置导入和使用

答案 1 :(得分:3)

config.get实用程序可用于获取配置值,如下所示:

import config from 'config';

const port: number = config.get('server.port');

答案 2 :(得分:1)

我使用IConfig界面,所以我可以先设置配置路径:

import { IConfig } from 'config';

export function dosomething() {

  process.env["NODE_CONFIG_DIR"] = 'path to config dir';

  //using get
  const config: IConfig = require("config");
  const port = config.get('server.port');
  console.log('port', port);

  //using custom schema
  const config2: { server: { port: number } } = require("config");
  console.log('config2.server.port', config2.server.port);

}

//port 4000
//config2.server.port 4000

答案 3 :(得分:1)

从上一本书开始,我仍然遇到麻烦,config无法从server找到default.ts密钥。

以下是我使用npm config模块的方式。将export default {更新为export =

// default.ts
export = {
  server: {
    port: 4000,
  },
  logLevel: 'error',
};

在应用内的使用方式[相同]:

import config from 'config';

console.log(config.get('server'));

答案 4 :(得分:1)

使用此“从'config'导入*作为配置;”而不是“从'config'导入配置;”

    import * as config from 'config';

    const port = config.get('server.port');
    console.log('port', port);
    // port 4000

config / development.json

    {
      "server": {
          "port": 4000
      }
    }

并设置NODE_ENV = development

 export NODE_ENV=development

注意:如果使用默认值,则无需设置NODE_ENV

答案 5 :(得分:0)

您可以使用 any 返回类型。

const serverConfig: any = config.get('server');