@kobayami/env-utils

Utilities for multi-platform code that runs in Web and NodeJS environments.

Usage no npm install needed!

<script type="module">
  import kobayamiEnvUtils from 'https://cdn.skypack.dev/@kobayami/env-utils';
</script>

README

@kobayami/env-utils

Installation

npm install --save @kobayami/env-utils

Version and License

Summary

Utilities for multi-platform code that runs in Web and NodeJS environments:

  • Check for environment type (NodeJS or Web)
  • Enable dynamic NodeJS module loading during runtime (i.e., not via static import statements)
  • WebPack compatibility

Usage Example

Dynamically loads a NodeJS module during runtime. Throws an exception if the code is not running in a NodeJS environment. This can also be safely embedded into code running in a Web environment like this:

if (envType === EnvType.NODE) {
    const leModule = requireNodeModuleAtRuntime('leModule');
    leModule.foo();
    ...
}

This is a practical example from @kobayami/threads:

const WorkerClass = envType === EnvType.NODE?
    requireNodeModuleAtRuntime('worker_threads').Worker: Worker

For multi platform code, this approach is sometimes necessary, because NodeJS specific modules must only be loaded after we have confirmed that we are not running in a Web environment. A simple import at the beginning of a file would therefore not work, browsers would raise a 404 error.

Module loading via this function is also compatible with WebPack, which is the actual reason why we need it as a wrapper for the NodeJS require function. When your code is being bundled and packaged by WebPack, dynamic module loading via this approach does not confuse WebPack. No additional configuration is necessary.

See Also