FuseBox Bundler

2.1.0-beta.4 · abandoned · verified Tue Apr 21

FuseBox is a JavaScript module bundler and loader that gained traction for its speed and 'zero configuration' approach to common tasks, especially with TypeScript. It previously offered features like Hot Module Replacement (HMR), a development server, and built-in Rollup support. The project released its v4.0.0 version, which notably shifted its configuration paradigm from programmatic JavaScript/TypeScript files to an XML-based system using `fusebox.xml` and `circuit.xml` files. However, the `fuse-box` GitHub repository was archived by its owner on June 20, 2023, and is now read-only. This indicates that while FuseBox v4 exists, it is no longer actively maintained or developed, and the project is considered abandoned. During its active development, key differentiators included reported blazing fast bundle times (50-100ms rebuilds), first-class TypeScript support without extensive configuration, and a comprehensive loader API supporting 'arithmetic instructions' and wildcard imports.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to configure FuseBox for a basic TypeScript project, including setting up a development server with Hot Module Replacement (HMR) and a production build with minification and HTML generation. This configuration style is typical for FuseBox v3.x.

import { FuseBox, WebIndexPlugin, CSSPlugin, QuantumPlugin } from "fuse-box";
import * as path from "path";

async function bundleApp() {
    const isProduction = process.env.NODE_ENV === "production";

    const fuse = FuseBox.init({
        homeDir: "src", // Your source code directory
        output: "dist/$name.js", // Output bundled files to dist/
        target: "browser", // Target browser environment
        hash: isProduction, // Add hash to filenames in production
        plugins: [
            CSSPlugin(), // Process CSS files
            WebIndexPlugin({ template: "src/index.html" }), // Generate index.html
            isProduction && QuantumPlugin({
                uglify: true, // Minify JavaScript
                css: true, // Minify CSS
            }),
        ].filter(Boolean),
        log: !isProduction,
        debug: !isProduction,
    });

    // Setup development server with HMR for non-production builds
    if (!isProduction) {
        fuse.dev({ port: 4444, httpServer: true });
        fuse.bundle("app")
            .instructions(`>index.ts`) // Entry point
            .hmr() // Enable Hot Module Reloading
            .watch(); // Watch for changes
    } else {
        // Production bundle
        fuse.bundle("app")
            .instructions(`>index.ts`);
    }

    await fuse.run();
    console.log("FuseBox bundling complete!");
}

bundleApp().catch(console.error);

// To make this runnable, ensure you have:
// 1. A 'src' directory with 'index.ts' (e.g., console.log("Hello from FuseBox!");)
// 2. A 'src/index.html' (e.g., <body><div id="root"></div></body>)
// 3. Run with `NODE_ENV=development ts-node fuse.ts` or `NODE_ENV=production ts-node fuse.ts`

view raw JSON →