load-plugin
Load a submodule, plugin, or file
Last updated 4 years ago by wooorm .
MIT · Repository · Bugs · Original npm
$ cnpm install load-plugin 
SYNC missed versions from official npm registry.

load-plugin

Build Coverage Downloads

Load a submodule, plugin, or file. Like Node’s require and require.resolve, but from one or more places, and optionally global too.

Install

This package is ESM only: Node 12+ is needed to use it and it must be imported instead of required.

npm:

npm install load-plugin

Use

Say we’re in this project (with dependencies installed):

import {loadPlugin, resolvePlugin} from 'load-plugin'

main()

async function main() {
  await resolvePlugin('lint', {prefix: 'remark'})
  // => '/Users/tilde/projects/oss/load-plugin/node_modules/remark-lint/index.js'

  await resolvePlugin('@babel/function-name', {prefix: 'helper'})
  // => '/Users/tilde/projects/oss/load-plugin/node_modules/@babel/helper-function-name/lib/index.js'

  await resolvePlugin('./index.js', {prefix: 'remark'})
  // => '/Users/tilde/projects/oss/load-plugin/index.js'

  await loadPlugin('lint', {prefix: 'remark'})
  // => [Function: lint]
}

API

This package exports the following identifiers: loadPlugin, 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
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.

Returns

Promise.<unknown> — Promise yielding the results of requireing the first path that exists. The promise rejects if requireing 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 path for name instead of importing it. Throws if name cannot be found.

License

MIT © Titus Wormer

Current Tags

  • 5.0.0                                ...           latest (3 years ago)

4 Versions

  • 5.0.0                                ...           3 years ago
  • 3.0.0                                ...           6 years ago
  • 4.0.1                                ...           4 years ago
  • 2.3.1                                ...           6 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dependencies (2)
Dev Dependencies (11)
Dependents (0)
None

Copyright 2013 - present © cnpmjs.org