@gasket/resolve
Essential module resolution and configuration management for Gasket plugins and
presets.
Guides
Installation
npm i @gasket/resolve
Naming convention
Plugins and presets should adhere to the project-type prefixed naming
convention. This formatting allows user plugins to be referenced with short
names and will help avoid collisions. This convention also mimics those by other
projects such a @babel
and @oclif
.
Plugins
scope | format | short | description |
---|
project | @gasket/plugin-<name> | @gasket/<name> | Official Gasket project plugin |
user | @<scope>/gasket-plugin-<name> | @<scope>/<name> | Any user plugins with a scope |
user | @<scope>/gasket-plugin | @<scope> | Scope-only user plugins |
none | gasket-plugin-<name> | <name> | Any user plugins with no scope |
Presets
scope | format | short | description |
---|
project | @gasket/preset-<name> | @gasket/<name> | Official Gasket project preset |
user | @<scope>/gasket-preset-<name> | @<scope>/<name> | Any user presets with a scope |
user | @<scope>/gasket-preset | @<scope> | Scope-only user presets |
none | gasket-preset-<name> | <name> | Any user presets with no scope |
Utilities
There are util functions for creating objects for working with different parts
of package identifiers for plugins and presets.
const { pluginIdentifier } = require('@gasket/resolve');
let identifier = pluginIdentifier('@gasket/plugin-example@^1.2.0');
console.log(identifier.longName);
console.log(identifier.shortName);
console.log(identifier.version);
identifier = pluginIdentifier('@gasket/example');
console.log(identifier.longName);
console.log(identifier.shortName);
console.log(identifier.version);
See the API docs for more details on the pluginIdentifier and
presetIdentifier util functions.
Loading
While this package is mostly intended for gasket project internals, if a plugin
does need to load or resolve modules, a configured Loader instance is
available as gasket.loader
from the engine instance passed as the first
argument to all lifecycle hooks.
module.exports = {
hooks: {
someLifecycleHook: async function (gasket) {
const moduleInfo = await gasket.loader.loadModule('@some/package');
const module = gasket.loader.tryRequire('some-other-package');
}
}
}
License
MIT