marshall
v1.3.2
Published
Shared JavaScript configuration for Node.js and web apps
Downloads
78
Readme
marshall
Shared JavaScript configuration for Node.js and web apps
Marshall is heavily inspired by convict. If you only need configuration management for a Node.js app, convict is the way to go.
Features
- Use in any JavaScript environment
- Default values
- Environment variable overrides
- Command-line argument overrides
- Built-in documentation
- Strict validation by default
Warning: if your server config contains sensitive data, don't share it with your web application, since your secrets will be built into your application bundle.
Install
npm install marshall
Example
An example config.js
:
const marshall = require('marshall');
// Configuration schema
const config = marshall({
env: {
doc: 'The application environment',
format: ['production', 'development'],
default: 'development',
env: 'NODE_ENV',
arg: 'node-env',
},
port: {
doc: 'The port to bind',
format: 'port',
default: 8743,
env: 'PORT',
arg: 'port',
},
cacheDuration: {
doc: 'Length of time to cache static assets',
format: 'nat',
default: 5184000000, // 60 days
env: 'CACHE_DURATION',
arg: 'cache-duration',
},
api: {
doc: 'The API the application communicates with',
format: 'url',
default: 'https://api.company.com',
env: 'API',
arg: 'api',
},
});
module.exports = config;
Usage
const config = require('./config.js');
// Log a single configuration
console.log('Environment: ' + config.get('env'));
// Log all configurations
console.log('All config: ' + config.get());
// Log the current configuration details in a user-friendly format
console.log(config.doc());
// Log the current configuration details using the environment variable name as the key
console.log(config.env());
// Make use of a configuration
$.get(config.get('api') + '/users')
.done(function(allUsers) {
console.log(allUsers);
});
Command Line Overrides
Use environment variables or command line arguments to override default settings.
API=https://api.mycompany.com node my-app.js
or
node my-app.js -- api=https://api.mycompany.com
or both
DEBUG=true node my-app.js --node-env=test
Validation
Validation is provided by validator.
Built-in validations:
Boolean
- value must betypeof Boolean
Number
- value must betypeof Number
String
- value must betypeof String
port
- value must be a number between 0 and 65535nat
- value must be a natural numberurl
- value must be a URLalpha
- value must contain only alphabetical charactersbool
- value must betrue
orfalse
date
- value must be a dateemail
- value must be an email addressfloat
- value must be a floating point numberip
- value must be an IP addressphone
- value must be a phone number (configurable locale)number
- value must be a number
Versioning
To keep better organization of releases this project follows the Semantic Versioning 2.0.0 guidelines.
Contributing
Want to contribute? Follow these recommendations.