ice.js is a command line interface and builtin plugin system for the icejs React.js-based universal framework. It provides essential development commands and integrates multiple build plugins for various functionalities like authentication, routing, state management, server-side rendering, and multi-page applications. The tool serves as the core development toolchain for icejs applications, enabling developers to quickly scaffold, develop, and build React applications with built-in support for TypeScript, CSS modules, and modern JavaScript features.
npm install ice.js --save-devFor programmatic usage (framework integration):
// Main module exports an anonymous function via module.exports
const createIceCli = require("ice.js");ES Modules:
// ES module default import of the main function
import createIceCli from "ice.js";For accessing the plugin system directly:
// getBuiltInPlugins uses CommonJS export = syntax
const getBuiltInPlugins = require("ice.js/lib/getBuiltInPlugins");Most common usage is through the command line interface:
# Install ice.js as a dev dependency
npm install ice.js --save-dev
# Add scripts to package.json
{
"scripts": {
"start": "icejs start",
"build": "icejs build",
"test": "icejs test"
}
}
# Run development server
npm start
# Build for production
npm run build
# Run tests
npm testFor framework integration or custom tooling:
const createIceCli = require("ice.js");
const packageInfo = require("./package.json");
// Create CLI with custom framework name
createIceCli("my-framework", {
packageInfo: packageInfo,
extendCli: (program) => {
// Add custom commands
program
.command("custom")
.description("custom command")
.action(() => {
console.log("Custom command executed");
});
}
});ice.js is built around several key components:
Core CLI functionality providing
startbuildtest// CLI commands accessible via icejs executable
// icejs <command> [options]
// Available commands:
// - start: Start development server
// - build: Build project for production
// - test: Run Jest testsBuiltin plugin system that automatically configures development and build processes based on user configuration and project requirements.
/**
* Get builtin plugins based on user configuration
* @param {Object} userConfig - User configuration object
* @returns {Array} Array of plugin configurations
*/
function getBuiltInPlugins(userConfig);Programmatic interface for integrating ice.js into custom frameworks and toolchains.
/**
* Create CLI with framework integration (module.exports function)
* @param {string} frameworkName - Name of the framework
* @param {Object} options - Configuration options (destructured)
* @param {Object} options.packageInfo - Package.json information
* @param {Function} [options.extendCli] - Function to extend CLI with custom commands
*/
module.exports = function(frameworkName, { packageInfo, extendCli });/**
* User configuration object
* @typedef {Object} UserConfig
* @property {boolean} [disableRuntime] - Disable runtime features
* @property {boolean} [ssr] - Enable server-side rendering
* @property {boolean} [store] - Enable state management (default: true)
* @property {boolean} [auth] - Enable authentication (default: true)
* @property {Array} [plugins] - Additional user plugins
*/
/**
* Package information object (standard package.json structure)
* @typedef {Object} PackageInfo
* @property {string} name - Package name
* @property {string} version - Package version
* @property {Object} engines - Node.js engine requirements
* @property {string} engines.node - Node.js version requirement (e.g., ">=10.13.0")
* @property {Object} [__ICEJS_INFO__] - Ice.js framework information (auto-added)
* @property {string} [__ICEJS_INFO__.name] - Ice.js package name ("ice.js")
* @property {string} [__ICEJS_INFO__.version] - Ice.js package version
*/
/**
* Plugin configuration
* @typedef {string|Array} PluginConfig
* - String: Plugin name
* - Array: [pluginName, options]
*/