$ cnpm install optional-require
node.js require that let you handle module not found error without try/catch. Allows you to gracefully require a module only if it exists and contains no error.
So why not just do:
let some;
try {
some = require("some-optional-module");
} catch {
// do nothing
}
let some before try/catch"some-optional-module" contains error itself, above code will silently ignore it, leaving you, and more importantly, your users, puzzling on why it's not working -- the original reason that prompted the creation of this package.ES Modules:
import { optionalRequire } from "optional-require";
const some = optionalRequire("some-optional-module");
const bar = optionalRequire("bar", true); // log message when not found
const xyz = optionalRequire("xyz", "test"); // log with custom message
const fbPath = optionalRequire.resolve("foo", "foo doesn't exist");
CommonJS:
const { optionalRequire } = require("optional-require");
const foo = optionalRequire("foo") || {};
const rel = optionalRequire("../foo/bar", { require }); // relative paths need require
To require modules relative to your file, bind the function to your context:
ESM:
import { makeOptionalRequire } from "optional-require";
const optionalRequire = makeOptionalRequire(import.meta.url);
const myModule = optionalRequire("./my-module");
CommonJS:
const { makeOptionalRequire } = require("optional-require");
const optionalRequire = makeOptionalRequire(__dirname);
// or
const optionalRequire = makeOptionalRequire(require);
const myModule = optionalRequire("./my-module");
In older versions, this module exports makeOptionalRequire directly and this is the legacy usage in CommonJS only, which is still supported:
const optionalRequire = require("optional-require")(require);
const foo = optionalRequire("foo") || {};
const bar = optionalRequire("bar", true); // true enables console.log a message when not found
const xyz = optionalRequire("xyz", "test"); // "test" enables console.log a message with "test" added.
const fbPath = optionalRequire.resolve("foo", "foo doesn't exist");
const rel = optionalRequire("../foo/bar"); // relative module path works
Note: This legacy pattern only works in CommonJS mode since it relies on the require function.
https://jchip.github.io/optional-require/modules.html#optionalrequire
Apache-2.0 © Joel Chen
Copyright 2013 - present © cnpmjs.org | Home |