Skip to main content

@gasket/plugin-dynamic-plugins Examples

This document provides working examples for all exported interfaces and configuration patterns for the @gasket/plugin-dynamic-plugins package.

Plugin Export

The package exports a single default plugin that handles dynamic plugin loading.

Basic Plugin Usage

// gasket.js
import { makeGasket } from '@gasket/core';
import pluginDynamicPlugins from '@gasket/plugin-dynamic-plugins';

export default makeGasket({
plugins: [
pluginDynamicPlugins
]
});

Configuration Interface: dynamicPlugins

The plugin extends the GasketConfig interface with a dynamicPlugins property.

Basic Dynamic Plugin Configuration

// gasket.js
import { makeGasket } from '@gasket/core';
import pluginDynamicPlugins from '@gasket/plugin-dynamic-plugins';

export default makeGasket({
plugins: [
pluginDynamicPlugins
],
dynamicPlugins: [
'@gasket/plugin-docs',
'@gasket/plugin-docusaurus',
'@gasket/plugin-metadata'
]
});

Loading Local/Custom Plugins

// gasket.js
export default makeGasket({
plugins: [
pluginDynamicPlugins
],
dynamicPlugins: [
'@gasket/plugin-docs',
'./custom-plugin.js',
'./plugins/my-local-plugin.js'
]
});

Environment-Specific Dynamic Plugins

// gasket.js
export default makeGasket({
plugins: [
pluginDynamicPlugins
],
environments: {
local: {
dynamicPlugins: [
'@gasket/plugin-docs',
'@gasket/plugin-docusaurus'
]
},
'local.debug': {
dynamicPlugins: [
'@gasket/plugin-docs',
'@gasket/plugin-docusaurus',
'./debug-plugin.js'
]
},
prod: {
// No dynamic plugins in production
dynamicPlugins: []
}
}
});

Command-Specific Dynamic Plugins

// gasket.js
export default makeGasket({
plugins: [
pluginDynamicPlugins
],
commands: {
docs: {
dynamicPlugins: [
'@gasket/plugin-docs',
'@gasket/plugin-docusaurus'
]
},
analyze: {
dynamicPlugins: [
'@gasket/plugin-analyze'
]
}
}
});

Waiting for Dynamic Plugins to Load

// my-plugin.js
export default {
name: 'my-plugin',
actions: {
async myAction(gasket) {
// Wait for dynamic plugins to be loaded before executing
await gasket.isReady;

// Now safe to use actions from dynamic plugins
const metadata = await gasket.actions.getMetadata();
return metadata;
}
},
hooks: {
async express(gasket, app) {
// Wait for dynamic plugins before setting up routes
await gasket.isReady;

app.get('/api/info', async (req, res) => {
// Dynamic plugin actions are now available
res.json({ ready: true });
});
}
}
};

Handling Falsy Values in Dynamic Plugins

// gasket.js
export default makeGasket({
plugins: [
pluginDynamicPlugins
],
dynamicPlugins: [
'@gasket/plugin-docs',
process.env.NODE_ENV === 'development' ? '@gasket/plugin-docusaurus' : null,
undefined, // These will be filtered out
'', // This will be filtered out
'@gasket/plugin-metadata'
]
});

Complex Environment-Based Configuration

// gasket.js
const isProduction = process.env.NODE_ENV === 'production';
const isDevelopment = process.env.NODE_ENV === 'development';

export default makeGasket({
plugins: [
pluginDynamicPlugins
],
environments: {
local: {
dynamicPlugins: [
'@gasket/plugin-docs',
'@gasket/plugin-docusaurus',
'./dev-tools-plugin.js'
]
},
test: {
dynamicPlugins: [
'./test-helpers-plugin.js'
]
},
staging: {
dynamicPlugins: [
'@gasket/plugin-docs' // Only docs in staging
]
},
prod: {
// No dynamic plugins in production
}
}
});