{"_id":"envar","_rev":"6-77c3604595df7d4fd2f7645f8e8212a3","name":"envar","description":"Library to read environment variables, including npm package config, custom config file, command line and default object","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"envar","version":"1.0.0","description":"Goes as high as environment (including npm config) and as low as command line options to find variable you've requested.","main":"index.js","scripts":{"test":"node ./test --test ok"},"engines":{"node":">= 0.8.0"},"repository":{"type":"git","url":"git://github.com/alexindigo/node-envar.git"},"keywords":["env","environment","argument","args","option","cli","process","config","npm"],"author":{"name":"Alex Indigo","email":"iam@alexindigo.com"},"license":"MIT","bugs":{"url":"https://github.com/alexindigo/node-envar/issues"},"dependencies":{"optimist":"~0.6.0","deeply":"~0.1.0"},"devDependencies":{"tap":"~0.4.4"},"_id":"envar@1.0.0","dist":{"shasum":"b45d03aac9dbeb2a46bab8a5d28cb31697ed312c","tarball":"https://registry.npmjs.org/envar/-/envar-1.0.0.tgz","integrity":"sha512-GyWM9ur8mmaadi7m2mVhH0KEPtFHlrxl9e8q7ZQ3TmKdOlZGUkLAn0Ovg5QnketnAJ28n6GY1joaEzoAKMzuOQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEUXrW5Mmi4/5DCTg4MMMvYVowD1VVtY1fLmRRsCUvRAAiEA14TdWeL9CXtdz9YNKjUY2LQfr19hPB6ND3Ut+r78Z4c="}]},"_from":".","_npmVersion":"1.3.8","_npmUser":{"name":"alexindigo","email":"iam@alexindigo.com"},"maintainers":[{"name":"alexindigo","email":"iam@alexindigo.com"}]},"2.0.0":{"name":"envar","version":"2.0.0","description":"Library to read environment variables, including npm package config, custom config file, command line and default object","main":"index.js","scripts":{"lint":"eslint index.js","debug":"node test.js --test ok","test":"istanbul cover test.js -- --test ok","posttest":"istanbul check-coverage"},"pre-commit":["lint","test"],"engines":{"node":">= 0.10"},"repository":{"type":"git","url":"git://github.com/alexindigo/node-envar.git"},"keywords":["env","environment","argument","args","option","cli","command line","process","config","npm","package","default"],"author":{"name":"Alex Indigo","email":"iam@alexindigo.com"},"license":"MIT","bugs":{"url":"https://github.com/alexindigo/node-envar/issues"},"dependencies":{"deeply":"^1.0.0","minimist":"^1.2.0"},"devDependencies":{"codecov":"^1.0.1","coveralls":"^2.11.6","eslint":"^1.10.3","istanbul":"^0.4.2","pre-commit":"^1.1.2","tap":"^5.4.2"},"gitHead":"5a6e1cf3d2c9fb4033c3333ca3f4e5200c020eda","homepage":"https://github.com/alexindigo/node-envar#readme","_id":"envar@2.0.0","_shasum":"44f7cdafbf976b732b73ad1acb2e8808ecf8876e","_from":".","_npmVersion":"2.10.1","_nodeVersion":"0.12.4","_npmUser":{"name":"alexindigo","email":"iam@alexindigo.com"},"dist":{"shasum":"44f7cdafbf976b732b73ad1acb2e8808ecf8876e","tarball":"https://registry.npmjs.org/envar/-/envar-2.0.0.tgz","integrity":"sha512-D/7XG/p8dpb+NsWUCxv3phjBUKMEm8J9mtKkMYr+FhnnBmI1cC561BWVRYl9rwgrwx/nDqHLDSDOql/I+C787A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBfLN2gyy45zNJUaZPRXC/Ij3ZrUEceft97MCfKo8NyEAiB9vIYnRBXqgWomtQ6prYFHpyHPpBa17UZN18oNtpMe8g=="}]},"maintainers":[{"name":"alexindigo","email":"iam@alexindigo.com"}],"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/envar-2.0.0.tgz_1454961849561_0.4703413578681648"}}},"readme":"# envar [![NPM Module](https://img.shields.io/npm/v/envar.svg?style=flat)](https://www.npmjs.com/package/envar)\n\nLibrary to read environment variables, including npm package config, custom config file, command line and default object.\n\n[![Linux Build](https://img.shields.io/travis/alexindigo/node-envar/master.svg?label=linux:0.10-5.x&style=flat)](https://travis-ci.org/alexindigo/node-envar)\n[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/node-envar/master.svg?label=windows:0.10-5.x&style=flat)](https://ci.appveyor.com/project/alexindigo/node-envar)\n\n[![Coverage Status](https://img.shields.io/coveralls/alexindigo/node-envar/master.svg?label=code+coverage&style=flat)](https://coveralls.io/github/alexindigo/node-envar?branch=master)\n[![Dependency Status](https://img.shields.io/david/alexindigo/node-envar.svg?style=flat)](https://david-dm.org/alexindigo/node-envar)\n\n[![bitHound Overall Score](https://www.bithound.io/github/alexindigo/node-envar/badges/score.svg)](https://www.bithound.io/github/alexindigo/node-envar)\n\n## Install\n\n```\n$ npm install --save envar\n```\n\n## Usage\n\n### Basic\n\nAdd some environment variables\n\n```bash\n$ export user=my_account\n$ export pass=my_secret\n```\n\nRun node script with custom port\n\n```bash\n$ node ./my_project.js --port 8080\n```\n\nEnjoy aggregated state:\n\n```javascript\nvar http  = require('http')\n  , envar = require('envar') // it will automatically process command line options (using optimist)\n  ;\n\n// define defaults for demo/test environments\nenvar.defaults(\n{\n  port: 1337,\n  user: 'demo',\n  pass: 'demo'\n});\n\nhttp.createServer(function(req, res)\n{\n  var auth = getAuth(req); // just for the example's sake\n\n  if (auth.user == envar('user') && auth.pass == envar('pass'))\n  {\n    res.end('Welcome '+envar('user')+'!'); // will be `my_account` or `demo` if environment is not populated\n  }\n  else\n  {\n    res.end('Please authorize.');\n  }\n\n}).listen(envar('port')); // will be 8080 or 1337 if no option provided\n\n```\n\n### Defaults\n\nAdds default parameters to the mix, will be used if all other layers failed lookup. And will be overridden if present in any other layer. Consider it as last resort fallback.\n\n```javascript\nvar envar = require('envar');\n\nenvar.defaults(\n{\n  port: 1337,\n  user: 'test'\n});\n\nenvar('port'); // -> 1337\nenvar('user'); // -> 'test'\nenvar('pass'); // -> undefined, not present in any layer\n```\n\n### Prefix\n\nPrefix only affects environment variables layer\n\n```bash\n$ export my_app_user=me\n$ export my_app_pass=12345\n$ node ./my_project.js --port 8001\n```\n\n```javascript\nvar envar = require('envar');\n\nenvar.prefix('my_app_');\n\nenvar('user'); // -> me\nenvar('pass'); // -> 12345\nenvar('port'); // -> 8001\n```\n\n### Variables lookup order\n\nDefault lookup order is ```AENCD```, where:\n\n- ```A``` - argv/cli options\n- ```E``` - environment variables\n- ```N``` - npm package configuration parameters\n- ```C``` - imported json config file (if any)\n- ```D``` - default parameters\n\nOrder can be changed by calling ```envar.order(<new order>);```\n\n```bash\n$ export port=8080\n$ node ./my_project.js --port 80\n```\n\n```javascript\nvar envar = require('envar');\n\nenvar.defaults({port: 1337});\n\n// default order 1. argv, 2. env, 3. npm, 4. json config file, 5. defaults\nenvar.order(); // -> AENCD\nenvar('port'); // -> 80\n\n// Change order to 1. env, 2. defaults, 3. argv\nenvar.order('EDA'); // and don't bother with npm config or json config file\nenvar('port'); // -> 8080\n\n// Change order to only defaults\nenvar.order('D');\nenvar('port'); // -> 1337\n\n// and change it back to original\nenvar.order('AENCD');\n\n```\n\n### NPM config layer\n\nFor more information about NPM configuration parameters check out [NPM Per-Package Config Settings](https://npmjs.org/doc/misc/npm-config.html#Per-Package-Config-Settings)\n\n```bash\n$ npm config set my_project:port 80\n$ node ./my_project.js\n```\n\n```javascript\nvar envar = require('envar');\n\nenvar('port'); // -> 80\n```\n\n### Import config file\n\nIf you have data stored in some json file, like for example ```env.json```, you can add it to the mix using ```envar.import()``` method.\n\n*Note*: ```envar.import``` method is sync like ```require```, so it makes sense to use it before execution app's logic.\n\n```bash\n$ cat env.json\n{\n  \"port\": 5432,\n  \"user\": \"pg\"\n}\n\n$ node ./my_project.js\n```\n\n```javascript\nvar envar = require('envar');\n\nenvar.import('env.json');\n\nenvar('port'); // -> 5432\nenvar('user'); // -> pg\n```\n\nOr if your project is using more sophisticated means of configuration storage, you can pass javascript object.\n\n```javascript\nvar envar = require('envar');\n\nstorage.getConfig(function(err, config)\n{\n  if (err) throw err;\n\n  // config -> {port: 5432, user: 'pg'}\n  envar.import(config);\n\n  envar('port'); // -> 5432\n  envar('user'); // -> pg\n});\n\n```\n\n### Accessing individual layers\n\nIn case cases you may need to have access to specific layer in the mix, following methods could be used for this task:\n\n```javascript\nvar envar = require('envar');\n\nenvar.default('port'); // will fetch data directly from `defaults` layer\n\nenvar.config('port'); // will fetch data directly from `config file` layer\n\nenvar.npm('port'); // will fetch data directly from `npm package config` layer\n\nenvar.env('port'); // will fetch data directly from `environment variables` layer\n\nenvar.arg('port'); // will fetch data directly from `argv/cli` layer\n```\n\nNote: All direct layer access methods, can be used to override/assign values.\n\nNote 2: ```envar.arg``` and ```envar.npm``` coerce all values into strings, because of the way node interacts with the process's environment.\n\n```javascript\nvar envar = require('envar');\n\nenvar.env('test'); // -> undefined\n\nenvar.env('test', 25); // -> '25'\n\nenvar.env('test'); // -> '25'\n\nprocess.env['test']; // -> '25'\n```\n\nNote 3: `undefined` has special meaning within ```envar.arg``` and ```envar.npm```, it removes corresponding key from the environment variables, to prevent it coercing into a string (i.e. `undefined -> 'undefined'`).\n\n```javascript\nvar envar = require('envar');\n\nenvar('test'); // -> undefined\n\nenvar.env('test', 'me env'); // -> 'me env'\nenvar.default('test', 'me default'); // -> 'me default'\nenvar('test'); // -> 'me env'\n\nenvar.env('test', undefined); // -> undefined\nenvar('test'); // -> 'me default'\n\nenvar.default('test', undefined); // -> undefined\nenvar('test'); // -> undefined\n```\n\n## History\n\nHistory of the project could be found in  [CHANGELOG.md](CHANGELOG.md).\n\n## TODO\n\n- Add case insensitive option\n- Add cli options aliases\n- Add config file watch\n- Add config file save\n- Add npm config save\n\n## License\n\nEnVar is licensed under the MIT license.\n","maintainers":[{"name":"alexindigo","email":"iam@alexindigo.com"}],"time":{"modified":"2022-06-17T06:34:54.879Z","created":"2013-09-06T19:06:29.533Z","1.0.0":"2013-09-06T19:06:30.926Z","2.0.0":"2016-02-08T20:04:10.568Z"},"author":{"name":"Alex Indigo","email":"iam@alexindigo.com"},"repository":{"type":"git","url":"git://github.com/alexindigo/node-envar.git"},"homepage":"https://github.com/alexindigo/node-envar#readme","keywords":["env","environment","argument","args","option","cli","command line","process","config","npm","package","default"],"bugs":{"url":"https://github.com/alexindigo/node-envar/issues"},"license":"MIT","readmeFilename":"README.md"}