![require(esm) Backported to Node.js 20, Paving the Way for ESM-Only Packages](https://cdn.sanity.io/images/cgdhsj6q/production/be8ab80c8efa5907bc341c6fefe9aa20d239d890-1600x1097.png?w=400&fit=max&auto=format)
Security News
require(esm) Backported to Node.js 20, Paving the Way for ESM-Only Packages
require(esm) backported to Node.js 20, easing the transition to ESM-only packages and reducing complexity for developers as Node 18 nears end-of-life.
@fullerstack/ngx-config
Advanced tools
An Angular Configuration Library - Handles local and remote configurations
In general, passing the environment.ts
into your publishable libraries may not be possible unless a relative path is used. However, relative paths will break the dependency graph of your mono-repo stack. This is due to the fact that the libs should not have any knowledge of the applications using them. If so, that will constitute a circular dependency.
Till Angular
natively supports something like, import { environment } from '@angular/core/environment'
, your publishable libs must implement an InjectionToken
to receive the environment
object and provide it with an APP_INITIALIZER
directly during the app's bootstrapping.
Alternatively, you can have a simple lib such as @fullerstack/ngx-config
to receive the environment
object and provide it to all other publishable libs via an injectable service such as ConfigService
.
@fullerstack/ngx-config attempts to streamline the sharing of the content of the environment.ts
while promoting DRY.
npm i @fullerstack/ngx-config |OR| yarn add @fullerstack/ngx-config
// In your environment{prod,staging}.ts
import { ApplicationConfig, HttpMethod } from '@fullerstack/ngx-config';
export const environment: Readonly<ApplicationConfig> = {
// production, staging or development
production: false,
// one or more app specific field(s)
version: '1.0.0',
};
// In your app.module.ts
import { ConfigModule } from '@fullerstack/ngx-config';
import { environment } from '../environments/environment';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, ConfigModule.forRoot(environment)],
bootstrap: [AppComponent],
})
export class AppModule {}
// In your app.component.ts or (some.service.ts)
import { Component } from '@angular/core';
import { ConfigService } from '@fullerstack/ngx-config';
@Component({
selector: 'fullerstack-root',
})
export class AppComponent {
title: string;
constructor(public config: ConfigService) {
this.title = this.config.options.appName;
}
}
@fullerstack/ngx-config
can also be used to fetch remote configuration prior to start of an Angular app.
// In your environment{prod,staging}.ts
import { ApplicationConfig, HttpMethod } from '@fullerstack/ngx-config';
export const environment: ApplicationConfig = {
// production, staging or development
production: true,
// release version
version: '1.0.0',
// remote configuration (from the server prior to ng bootstrap)
remoteConfig: {
// server url to get remote config from (default = null)
endpoint: '/api/config',
// GET or POST http method to connect to remote server (default = get)
method: HttpMethod.GET,
// Max timeout of http connection to remote server (default = 2 seconds)
timeout: 3,
// http headers to include in http connection to remote server
headers: { 'Content-Type': 'application/json' }
// body of request when using http POST method (default = {})
body: {
// one or more app specific field(s)
}
}
// one or more app specific field(s)
};
// In your app.module.ts
import { ConfigModule } from '@fullerstack/ngx-config';
import { environment } from '../environments/environment';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule, ConfigModule.forRoot(environment)],
bootstrap: [AppComponent],
})
export class AppModule {}
// In your app.component.ts or (some.service.ts)
import { Component } from '@angular/core';
import { ConfigService } from '@fullerstack/ngx-config';
import { merge } from 'lodash';
@Component({
selector: 'fullerstack-root'
})
export class AppComponent {
title: string;
options = {};
constructor(public config: ConfigService) {
this.options = merge({ name: 'AppComponent' }, this.config.options};
const remoteConfigData = this.options.remoteData;
}
}
Released under a (MIT) license.
X.Y.Z Version
`MAJOR` version -- making incompatible API changes
`MINOR` version -- adding functionality in a backwards-compatible manner
`PATCH` version -- making backwards-compatible bug fixes
FAQs
A Configuration Utility Library for Angular
We found that @fullerstack/ngx-config demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
require(esm) backported to Node.js 20, easing the transition to ESM-only packages and reducing complexity for developers as Node 18 nears end-of-life.
Security News
PyPI now supports iOS and Android wheels, making it easier for Python developers to distribute mobile packages.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.