Out of the box application environment and configuration service.
Need to manage several environment and configurations for your
knifecycle
based app? This module
is all what your need.
Out of the box, standard compliant, application environment:
- accepting only
standard
NODE_ENV
values:test
,development
,production
, - managing application environment in a clean and separate
APP_ENV
environment variable, - leverage
dotenv
to read environment variables, - manage separate and type checked applications configurations for each
deployment environments and allows loading it automatically (in the
./configs/${APP_ENV}/index
file).
It requires log
and importer
services to be passed in, you can find
implementations in the
common-services
project.
It also relies on constant services you will have to provide: APP_ENV
,
NODE_ENV
and the MAIN_FILE_URL
(directory where actual code is).
- extractAppEnv(appEnv, availableAppEnvs) ⇒
Cast any string into an application environment
- initAppConfig(services) ⇒
Promise.<Object>
Initialize the APP_CONFIG service according to the APP_ENV
- initENV(services) ⇒
Promise.<Object>
Initialize the ENV service using process env plus dotenv files loaded in
.env.node.${ENV.NODE_ENV}
and.env.app.${APP_ENV}
.- initProcess(services) ⇒
Promise.<Object>
Instantiate the process service
- initProjectDirectory(services) ⇒
Promise.<Object>
Initialize the PROJECT_DIR service
Provides the PROCESS_ENV service : Object
Kind: global constant
Cast any string into an application environment
Kind: global function
Returns: string
Param | Description |
---|---|
appEnv | string |
availableAppEnvs | string[] |
Initialize the APP_CONFIG service according to the APP_ENV
Kind: global function
Returns: Promise.<Object>
- A promise of a an object the actual configuration properties.
Param | Type | Default | Description |
---|---|---|---|
services | Object |
The services APP_CONFIG depends on |
|
services.APP_ENV | Object |
The injected APP_ENV value |
|
services.MAIN_FILE_URL | String |
An URL pointing to the main file run | |
services.importer | Object |
A service allowing to dynamically import ES modules | |
[services.log] | Object |
noop |
An optional logging service |
Initialize the ENV service using process env plus dotenv files
loaded in .env.node.${ENV.NODE_ENV}
and .env.app.${APP_ENV}
.
Kind: global function
Returns: Promise.<Object>
- A promise of an object containing the actual env vars.
Param | Type | Default | Description |
---|---|---|---|
services | Object |
The services ENV depends on |
|
[services.BASE_ENV] | Object |
Base env vars that will be added to the environment | |
services.APP_ENV | Object |
The injected APP_ENV value |
|
services.PROCESS_ENV | Object |
The injected process.env value |
|
services.PROJECT_DIR | Object |
The NodeJS project directory | |
[services.log] | Object |
noop |
An optional logging service |
Instantiate the process service
Kind: global function
Returns: Promise.<Object>
- A promise of the process object
Param | Type | Default | Description |
---|---|---|---|
services | Object |
The services process depends on |
|
services.APP_ENV | Object |
The injected APP_ENV value |
|
[services.PROCESS_NAME] | Object |
The process name to display | |
[services.SIGNALS] | Object |
The process signals that interrupt the process | |
[services.exit] | Object |
A process.exit like function |
|
services.$instance | Object |
The Knifecycle instance | |
services.$fatalError | Object |
The Knifecycle fatal error manager | |
[services.log] | Object |
noop |
An optional logging service |
Initialize the PROJECT_DIR service
Kind: global function
Returns: Promise.<Object>
- A promise of a an object the actual configuration properties.
Param | Type | Default | Description |
---|---|---|---|
services | Object |
The services PROJECT_DIR depends on | |
[services.log] | Object |
noop |
An optional logging service |