Skip to content
/ loadr Public

Quickly attach multiple ESM Loaders and/or Require Hooks together but without the repetitive `--experimental-loader` and/or `--require` Node flags

License

Notifications You must be signed in to change notification settings

lukeed/loadr

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

loadr
Quickly attach multiple ESM Loaders and/or Require Hooks together
but without the repetitive `--experimental-loader` and/or `--require` Node flags

Features

  • Extremely lightweight
  • Easily chain multiple ESM Loaders together
  • Interleave additional --require hooks at the same time
  • Command spawns as a ChildProcess, forwarding the current process.env context

The ESM Loader API is still experimental and will change in the future.

Install

$ npm install --save-dev loadr

Example

Before

$ node --require dotenv/config \
  --experimental-loader ts-node/esm \
  --experimental-loader ./tests/loader.mjs \
  server/index.mjs

After

$ loadr -- node server/index.mjs
// loadr.mjs
export const loaders = [
  'ts-node/esm',
  './tests/loader.mjs',
]
export const registers = [
  'dotenv/config',
]

Usage

# Run `npm test` using the `loadr.mjs` configuration file
$ loadr -- npm test

# Run `npm test` using custom `loadr.custom.js` file
$ loadr -c loadr.custom.js -- npm test

# Run `node server.mjs` w/o system bell
$ loadr -q -- node server.mjs

CLI

The loadr binary expects the following usage:

$ loadr [options] -- <command>

Important: The -- is required! It separates your command from your loadr arguments.

Please run loadr --help for additional information.

Configuration

Unless specified via the -c or --config CLI arguments, loadr looks for a loadr.mjs configuration file in the current working directory – aka process.cwd().

loaders

Type: string[]

A list of files and/or modules to be added as an --experimental-loader hook.

Important: Any relative file paths will be resolved from the current working directory.

// loadr.mjs
export const loaders = [
  "ts-node/esm", // third-party module
  "./tests/loader.mjs", // local file
];

requires

Type: string[]

A list of files and/or modules to be added as a --require hook. Please note that ESM files cannot be loaded via a require() statement.

Important: Any relative file paths will be resolved from the current working directory.

// loadr.mjs
export const requires = [
  "esm", // third-party module
  "dotenv/register", // third-party module
  "./tests/setup.js", // local file
];

quiet

Type: Boolean
Default: false

By default, loadr invokes the system bell when your command process terminates with a non-zero exit code.

Note: If defined, the -q or --quiet CLI argument takes precedence over the configuation file.

// loader.mjs
export const quiet = true;

License

MIT © Luke Edwards

About

Quickly attach multiple ESM Loaders and/or Require Hooks together but without the repetitive `--experimental-loader` and/or `--require` Node flags

Resources

License

Stars

Watchers

Forks

Sponsor this project