node.js - Hvordan bruke node-config i typescript?


Etter å ha installert node-config og @types/config:

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

Og legge til konfigurasjon som beskrevet i lorenwest/node-config:

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

Når jeg prøver å bruke i appen min:

import config from 'config';

console.log(config.server);

Jeg får feilen:

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

Svar #1

Jeg tar en litt annen tilnærming - definerer variablene i JavaScript, og får tilgang til dem i TypeScript.

Ved å bruke følgende mappestruktur:

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

Jeg definerer konfigurasjonen i rotmappen config/. For eksempel:

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

Nå, i TypeScript-verdenen definerer jeg et grensesnitt for å gi bedre autoutfylling og dokumentasjon, og skriver noe brokode for å hente konfigurasjonen fra node-config inn i konfigurasjonskartet mitt:

// 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;

Endelig kan jeg nå importere og bruke mine konfigurasjonsvariabler inne i hvilken som helst TypeScript-kode.

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

const { port } = config;

const app = express();

app.listen(port);

Denne tilnærmingen har følgende fordeler:

  • Vi kan bruke de rike og battle-testede funksjonene som er tilgjengelige fra node-config uten å måtte gjenoppfinne hjulet
  • Vi har et sterkt typet, godt dokumentert konfigurasjonskart som kan importeres og brukes fra hvor som helst i vår TS-kode

Svar #2

config.get-verktøyet kan brukes for å hente konfigurasjonsverdiene slik:

import config from 'config';

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

Svar #3

Bruk dette «import * as config from 'config';» i stedet for «import config from 'config';»

    import * as config from 'config';

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

config/utvikling.json

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

og sett NODE_ENV=development

 export NODE_ENV=development

merk: Det er ikke nødvendig å sette denne NODE_ENV hvis du bruker standard

Relaterte artikler