Load a submodule, plugin, or file.
This package is useful when you want to load plugins.
It resolves things like Node.js does,
but supports a prefix (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 16+), 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'}))
// => 'file:///Users/tilde/Projects/oss/load-plugin/node_modules/remark-lint/index.js'
console.log(
await resolvePlugin('validator-identifier', {prefix: '@babel/helper'})
)
// => 'file:///Users/tilde/Projects/oss/load-plugin/node_modules/@babel/helper-validator-identifier/lib/index.js'
console.log(await resolvePlugin('./index.js', {prefix: 'remark'}))
// => 'file:///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.
It exports the TypeScript types
LoadOptions
and ResolveOptions
.
Import name
from from
(and optionally the global node_modules
directory).
Uses the Node.js resolution algorithm (through
import-meta-resolve
) to resolve CJS and ESM
packages and files.
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
.
-
name
(string
) — specifier -
options
(LoadOptions
, optional) — configuration
Promise to a whole module or specific export (Promise<unknown>
).
Resolve name
from from
.
-
name
(string
) — specifier -
options
(ResolveOptions
, optional) — configuration
Promise to a file URL (Promise<string>
).
Configuration for loadPlugin
(TypeScript type).
This type extends ResolveOptions
and adds:
-
key
(boolean
orstring
, default:'default'
) — identifier to take from the exports; for example when given'x'
, the value ofexport const x = 1
will be returned; when given'default'
, the value ofexport default …
is used, and whenfalse
the whole module object is returned
Configuration for resolvePlugin
(TypeScript type).
-
from
(Array<URL | string> | URL | string
, optional) — place or places to search from; defaults to the current working directory -
global
(boolean
, default: whether global is detected) — whether to look forname
in global places; 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 that Electron runs its own version of Node instead of your system Node, meaning global packages cannot be found, unless you’ve set-up aprefix
in your.npmrc
or are using nvm to manage your system node -
prefix
(string
, optional) — prefix to search for
This projects is compatible with maintained versions of Node.js.
When we cut a new major release,
we drop support for unmaintained versions of Node.
This means we try to keep the current release line,
load-plugin@6
,
compatible with Node.js 16.
This package reads the file system and imports things into Node.js.
Yes please! See How to Contribute to Open Source.