$ gnpm install load-plugin
Load submodules, plugins, or files.
This package is useful when you want to load plugins.
It resolves things like Node.js does, but supports a prefix (e.g., when given a
prefix remark
and the user provided value gfm
, it can find remark-gfm
),
can load from several places, and optionally global too.
This package is particularly useful when you want users to configure something
with plugins.
One example is remark-cli
which can load remark plugins from configuration
files.
This package is ESM only. In Node.js (version 14.14+, 16.0+), install with npm:
npm install load-plugin
Say we’re in this project (with dependencies installed):
import {loadPlugin, resolvePlugin} from 'load-plugin'
console.log(await resolvePlugin('lint', {prefix: 'remark'}))
// => '/Users/tilde/projects/oss/load-plugin/node_modules/remark-lint/index.js'
console.log(await resolvePlugin('validator-identifier', {prefix: '@babel/helper'}))
// => '/Users/tilde/Projects/oss/load-plugin/node_modules/@babel/helper-validator-identifier/lib/index.js'
console.log(await resolvePlugin('./index.js', {prefix: 'remark'}))
// => '/Users/tilde/projects/oss/load-plugin/index.js'
console.log(await loadPlugin('lint', {prefix: 'remark'}))
// => [Function: remarkLint]
This package exports the identifiers loadPlugin
and resolvePlugin
.
There is no default export.
loadPlugin(name[, options])
Uses Node’s resolution algorithm (through
import-meta-resolve
) to load CJS and ESM packages and
files to import name
in each given cwd
(and optionally the global
node_modules
directory).
If a prefix
is given and name
is not a path, $prefix-$name
is also
searched (preferring these over non-prefixed modules).
If name
starts with a scope (@scope/name
), the prefix is applied after it:
@scope/$prefix-name
.
options
Configuration (optional).
options.prefix
Prefix to search for (string
, optional).
options.cwd
Place or places to search from (string
, Array<string>
, default:
process.cwd()
).
options.global
Whether to look for name
in global places (boolean
, optional,
defaults to whether global is detected).
If this is nullish, load-plugin
will detect if it’s currently running in
global mode: either because it’s in Electron, or because a globally installed
package is running it.
Note: Electron runs its own version of Node instead of your system Node.
That means global packages cannot be found, unless you’ve set-up a prefix
in your .npmrc
or are using nvm to manage your system node.
options.key
Identifier to take from the exports (string
or false
, default: 'default'
).
For example when given 'whatever'
, the value of export const whatever = 1
will be returned, when given 'default'
, the value of export default …
is
used, and when false
the whole module object is returned.
Promise yielding the results of importing the first path that exists
(Promise<unknown>
).
The promise rejects if importing an existing path fails, or if no existing
path exists.
resolvePlugin(name[, options])
Search for name
.
Accepts the same parameters as loadPlugin
(except key
) but
returns a promise resolving to an absolute URL (string
) for name
instead of
importing it.
Throws if name
cannot be found.
This package is fully typed with TypeScript.
It exports the additional types ResolveOptions
and LoadOptions
.
This package is at least compatible with all maintained versions of Node.js. As of now, that is Node.js 14.14+ and 16.0+. It also works in Deno and modern browsers.
Yes please! See How to Contribute to Open Source.
Copyright 2013 - present © cnpmjs.org | Home |