Builtin plugin system that automatically configures development and build processes based on user configuration and project requirements. The system provides a comprehensive set of plugins for React applications, SSR, state management, authentication, and more.
Core function that returns the appropriate plugin configuration based on user settings and project requirements.
/**
* Get builtin plugins based on user configuration (CommonJS export = syntax)
* @param {Object} userConfig - User configuration object
* @returns {Array<string|Array>} Array of plugin configurations
*/
export = function getBuiltInPlugins(userConfig);Usage Examples:
const getBuiltInPlugins = require("ice.js/lib/getBuiltInPlugins");
// Get plugins for basic React app
const plugins = getBuiltInPlugins({});
// Get plugins with SSR enabled
const ssrPlugins = getBuiltInPlugins({ ssr: true });
// Get plugins with store disabled
const noStorePlugins = getBuiltInPlugins({ store: false });
// Get minimal plugin set for runtime-disabled apps
const minimalPlugins = getBuiltInPlugins({ disableRuntime: true });Essential plugins that are included in every configuration:
// Core application plugin with framework configuration
"build-plugin-app-core"
// React application base plugin
"build-plugin-react-app"
// Mini-app support plugin
"build-plugin-miniapp"
// Router functionality plugin
"build-plugin-ice-router"
// Helper utilities plugin
"build-plugin-ice-helpers"
// Logging plugin
"build-plugin-ice-logger"
// Configuration management plugin
"build-plugin-ice-config"
// Multi-page application plugin
"build-plugin-ice-mpa"
// HTTP request utilities plugin
"build-plugin-ice-request"
// React Helmet plugin for head management
"build-plugin-helmet"Plugins that are included based on user configuration:
// Included when userConfig.ssr === true
"build-plugin-ice-ssr"Configuration:
// Enable SSR plugin
const plugins = getBuiltInPlugins({ ssr: true });// Included by default unless userConfig.store === false
"build-plugin-ice-store"Configuration:
// Default behavior (store plugin included)
const plugins = getBuiltInPlugins({});
// Disable store plugin
const plugins = getBuiltInPlugins({ store: false });
// Explicitly enable store plugin
const plugins = getBuiltInPlugins({ store: true });// Included by default unless userConfig.auth === false
"build-plugin-ice-auth"Configuration:
// Default behavior (auth plugin included)
const plugins = getBuiltInPlugins({});
// Disable auth plugin
const plugins = getBuiltInPlugins({ auth: false });
// Explicitly enable auth plugin
const plugins = getBuiltInPlugins({ auth: true });When
disableRuntime/**
* Minimal plugin set for runtime-disabled applications
* @param {Object} userConfig - Must have disableRuntime: true
* @returns {Array} Minimal plugin array
*/
// Returns: ["build-plugin-react-app", "build-plugin-ice-mpa"]
getBuiltInPlugins({ disableRuntime: true });Usage:
// For applications that don't need the full ice.js runtime
const minimalPlugins = getBuiltInPlugins({
disableRuntime: true
});The app-core plugin receives special configuration:
/**
* Core plugin configuration object
* @typedef {Object} CoreOptions
* @property {string} framework - Framework type (always "react")
* @property {string} alias - Framework alias name
*/
// Configuration passed to build-plugin-app-core
{
framework: "react",
alias: process.env.__FRAMEWORK_NAME__ || "ice"
}The system detects and warns about duplicate auth plugin configurations:
/**
* Checks if build-plugin-ice-auth is already configured in user plugins
* Displays warning message if duplicate found
* @param {Object} userConfig - User configuration with plugins array
*/Behavior:
// If user manually adds auth plugin, warning is displayed:
const userConfig = {
plugins: ["build-plugin-ice-auth"]
};
const plugins = getBuiltInPlugins(userConfig);
// Console output: "The build-plugin-ice-auth has been built in. Please remove it from build.json."Plugin system respects environment variables for framework configuration:
// Framework name (defaults to "ice")
process.env.__FRAMEWORK_NAME__
// Framework version (set from package.json)
process.env.__FRAMEWORK_VERSION__Usage:
# Set custom framework name
__FRAMEWORK_NAME__=my-framework icejs start
# Framework version is automatically set
# process.env.__FRAMEWORK_VERSION__ = "1.18.6"Plugins can be specified as strings or arrays:
/**
* Plugin configuration formats
* @typedef {string|Array} PluginConfig
*/
// String format (plugin name only)
"build-plugin-react-app"
// Array format (plugin name with options)
["build-plugin-app-core", { framework: "react", alias: "ice" }]// Example of complete plugin list returned by getBuiltInPlugins
[
["build-plugin-app-core", { framework: "react", alias: "ice" }],
"build-plugin-react-app",
"build-plugin-miniapp",
"build-plugin-ice-router",
"build-plugin-ice-helpers",
"build-plugin-ice-logger",
"build-plugin-ice-config",
"build-plugin-ice-mpa",
"build-plugin-ice-request",
"build-plugin-helmet",
"build-plugin-ice-ssr", // if ssr: true
"build-plugin-ice-store", // if store !== false
"build-plugin-ice-auth" // if auth !== false
]