CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-ice-js

Command line interface and builtin plugin system for the icejs React.js-based universal framework

Pending
Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

index.mddocs/

ice.js

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.

Package Information

  • Package Name: ice.js
  • Package Type: npm
  • Language: JavaScript/TypeScript
  • Installation: npm install ice.js --save-dev

Core Imports

For 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");

Basic Usage

CLI Usage

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 test

Programmatic Usage

For 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");
      });
  }
});

Architecture

ice.js is built around several key components:

  • CLI Interface: Commander.js-based command line interface with standard development commands
  • Plugin System: Extensible plugin architecture with builtin plugins for common functionality
  • Build Scripts Integration: Built on @alib/build-scripts for consistent build processes
  • Child Process Management: Fork-based process management for development server isolation
  • Configuration Management: Flexible configuration system supporting multiple formats

Capabilities

Command Line Interface

Core CLI functionality providing start, build, and test commands with configurable options and plugin integration.

// CLI commands accessible via icejs executable
// icejs <command> [options]

// Available commands:
// - start: Start development server
// - build: Build project for production  
// - test: Run Jest tests

CLI Commands

Plugin System

Builtin 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);

Plugin System

Framework Integration

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 });

Framework Integration

Types

/**
 * 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]
 */

docs

cli-commands.md

framework-integration.md

index.md

plugin-system.md

tile.json