👩💻 Advancing the globalization of __DEV__
When mark-of-dev is first loaded into a process, it sets the so-called mark
of dev or global.__DEV__
to true
for non-production runs and false
for
production runs. This package considers a run as production if and only if the
value of process.env.NODE_ENV
is a case-insensitive match for either prod
or
production
. In case of a match, this package also updates
process.env.NODE_ENV
to the canonical production
string, just as written.
mark-of-dev is conservative in that it does not make any changes when
__DEV__
has already been defined and in that it prevents future changes when
it defines __DEV__
as a non-configurable, non-enumerable, and non-writable
property. It is liberal in that it works independent of how it is loaded. Both
CommonJS and ES6 are just fine. For once, that is possible because this
package's only module is executed for side effect only and thus has neither
imports nor exports.
Since mark-of-dev always sets __DEV__
, code may test for development runs
by mentioning the mark of dev by itself
if (__DEV__) { ... }
or by making the scope explicit
if (global.__DEV__) { ... }
Personally, I prefer the former, since it is more concise and easier to locally override. In either case, you are well-advised to declare the new global
"globals": { "__DEV__": false },
and be tolerant of its underscores
"no-underscore-dangle": ["error", { "allow": ["__DEV__"] }],
so that tools such as ESLint continue to peacefully coexist with your code.
🕊️ ✌️ ☮️
© 2018 Robert Grimm, released under the MIT license.