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-configuten å 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
