Skip to content

Latest commit

 

History

History
96 lines (70 loc) · 3.27 KB

README.md

File metadata and controls

96 lines (70 loc) · 3.27 KB

@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');

// if given a raw name as full package name with version...
let identifier = pluginIdentifier('@gasket/plugin-example@^1.2.0');

console.log(identifier.longName);   // @gasket/plugin-example
console.log(identifier.shortName);  // @gasket/example
console.log(identifier.version);    // ^1.2.0

// if given a raw name as short name...
identifier = pluginIdentifier('@gasket/example');
console.log(identifier.longName);   // @gasket/plugin-example
console.log(identifier.shortName);  // @gasket/example
console.log(identifier.version);    // null

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.

// @my/gasket-plugin-example.js

 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