1.0.4 • Published 5 years ago

env-to-code v1.0.4

Weekly downloads
44
License
MIT
Repository
github
Last release
5 years ago

Build Status Coverage

env-to-code

The module to parse process.env[SOME_KEY] into JavaScript variable or JavaScript code, especially, which is very useful for webpack.EnvironmentPlugin

Install

$ npm i env-to-code

Usage

# bash
export FOO=bar
export BAZ=1
export DEBUG=false
import {
  js,
  code
} from 'env-to-code'

js(process.env.FOO) === 'bar'       // true
code(process.env.FOO) === '"bar"'   // true

js(process.env.BAZ) === 1           // true

js(process.env.DEBUG) === false     // true
code(process.env.DEBUG) === 'false' // true

// But
JSON.stringify(process.env.DEBUG) === '"false"'  // true

new webpack.DefinePlugin({
  'process.env.DEBUG': code(process.env.DEBUG)
})

js(s, config?)

  • s string environment variable string
  • config ?Object optional config
    • testJSON ?boolean=false whether to test if s is a JSON. testJSON takes effect ahead of arrayDelimiter.
    • arrayDelimiter ?string=',' by default, it will try to split the env variable into array with arrayDelimiter. To disable this feature, set the option to false or ''

Parses the environment variable into JavaScript variable.

js('English, Chinese')    // ['English', 'Chinese']
js('English')             // 'English'

js('English, Chinese', {
  arrayDelimiter: false
})
// 'English, Chinese'

PAY ATTENTION THAT with testJSON=false and arrayDelimiter=',' which are the default options, method js() will split JSON array into an unexpected result, for example:

js('["a","b"]')
// [
//   '["a"',
//   '"b"]'
// ]

So, if environment variables contains JSON strings, it is better to set testJSON to true:

js('["a","b"]', {testJSON: true})
// ['a', 'b']

code(s, config?)

This method has the same arguments as js(), and parses s into JavaScript code string.

So it is useful for webpack.EnvironmentPlugin or writing JavaScript code into files.

new webpack.DefinePlugin({
  'process.env.NODE_ENV': code(process.env.NODE_ENV),
  'process.env.DEBUG': code(process.env.DEBUG)
})

or

// write.js
fs.writeFileSync('foo.js', `module.exports = {debug:${code(process.env.DEBUG)}}`)
DEBUG=true node write.js

And in foo.js

module.exports = {debug:true}

License

MIT