npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@0xbigboss/vite-console-forward-plugin

v2.3.3

Published

A Vite plugin that forwards browser console logs to the Vite dev server console

Downloads

221

Readme

vite-console-forward-plugin

A Vite plugin that forwards browser console logs to the Vite dev server console for better debugging experience during development.

What it does

This plugin intercepts browser console logs (console.log, console.warn, console.error, etc.) and forwards them to your Vite dev server console with module-aware tracking. This is particularly useful when:

  • Debugging client-side JavaScript in environments where browser dev tools aren't easily accessible
  • You want to see all application logs in one place with module context (e.g., [background], [content])
  • Working with mobile devices or embedded browsers
  • Running automated tests and want console output in your CI logs
  • Developing browser extensions where logs from different contexts need to be tracked separately

Installation

Since this is a single-file plugin, you can copy vite-console-forward-plugin.ts directly into your project, or install it as a local dependency.

Usage

Add the plugin to your vite.config.ts:

Basic Setup (Web Applications)

import { defineConfig } from "vite";
import { consoleForwardPlugin } from "./vite-console-forward-plugin";

export default defineConfig({
  plugins: [
    consoleForwardPlugin({
      // Default configuration works for most web apps
      // Automatically injects into all HTML files
    }),
  ],
});

Advanced Setup (Custom Configuration)

import { defineConfig } from "vite";
import { consoleForwardPlugin } from "./vite-console-forward-plugin";

export default defineConfig({
  plugins: [
    consoleForwardPlugin({
      // Include JavaScript/TypeScript files directly
      injectPatterns: [
        "**/*.{js,jsx,ts,tsx,html}"
      ],
      
      // Exclude test files and specific directories
      excludePatterns: [
        "**/node_modules/**",
        "**/*.test.{js,ts}",
        "**/dist/**"
      ],

      // Custom module name extraction
      moduleExtractor: (id: string) => {
        // Extract meaningful module names from file paths
        if (id.includes("/components/")) return "component";
        if (id.includes("/utils/")) return "utils";
        if (id.includes("/api/")) return "api";
        return "app";
      },
      
      // Forward errors and promise rejections
      forwardErrors: true,
    }),
  ],
});

Configuration

The consoleForwardPlugin accepts an options object with the following properties:

| Option | Type | Default | Description | | ----------------- | -------------------------------- | ------------------------------------------- | -------------------------------------------------- | | enabled | boolean | true | Whether to enable console forwarding | | endpoint | string | "/api/debug/client-logs" | API endpoint path for receiving logs | | levels | string[] | ["log", "warn", "error", "info", "debug"] | Console levels to forward | | injectPatterns | string[] | ["**/*.html"] | Glob patterns for files to inject console forwarding | | excludePatterns | string[] | ["**/node_modules/**"] | Glob patterns for files to exclude from injection | | moduleExtractor | (id: string) => string | Built-in path parser | Custom function to extract module names from paths | | silentOnError | boolean | true | Don't show console warnings when server is down | | forwardErrors | boolean | true | Forward uncaught errors and promise rejections |

Pattern Matching with Glob

The plugin uses micromatch for powerful glob pattern matching:

Default Behavior

By default, the plugin only injects into HTML files (["**/*.html"]). This is perfect for standard web applications where all JavaScript is loaded through HTML pages.

Custom Patterns

You can customize which files receive console forwarding using glob patterns:

consoleForwardPlugin({
  // Include all JavaScript and TypeScript files
  injectPatterns: ["**/*.{js,jsx,ts,tsx}"],
  
  // Exclude test files and node_modules
  excludePatterns: ["**/node_modules/**", "**/*.test.{js,ts}", "**/*.spec.{js,ts}"]
})

Common Pattern Examples

  • "**/*.js" - All JavaScript files
  • "src/**/*.{ts,tsx}" - TypeScript files in src directory
  • "!**/*.min.js" - Exclude minified files
  • "**/components/**/*.jsx" - JSX files in any components directory

Browser Extensions

For browser extension development, you'll need to specify your extension's entry points since they don't run through HTML files:

consoleForwardPlugin({
  enabled: isDev,
  // Target specific extension entry points
  injectPatterns: [
    "**/entries/background/**/*.{ts,js}",
    "**/entries/content/**/*.{ts,js}", 
    "**/entries/popup/**/*.{tsx,jsx}",
    "**/entries/options/**/*.{tsx,jsx}",
  ],
  // Custom module extraction for cleaner logs
  moduleExtractor: (id) => {
    if (id.includes("/background/")) return "background";
    if (id.includes("/content/")) return "content"; 
    if (id.includes("/popup/")) return "popup";
    if (id.includes("/options/")) return "options";
    return "extension";
  },
})

This will show logs like [background] User logged in or [content] Page loaded, making it easy to track which part of your extension is generating each log.

Web Workers and Service Workers

For applications using workers, add their scripts to the patterns:

consoleForwardPlugin({
  injectPatterns: [
    "**/*.html",
    "**/workers/**/*.js",
    "**/service-worker.js"
  ],
  moduleExtractor: (id) => {
    if (id.includes("service-worker")) return "service-worker";
    if (id.includes("/workers/")) return "worker";
    return defaultModuleExtractor(id);
  }
})

How it works

  1. Client-side: The plugin transforms your code to patch browser console methods
  2. Module tracking: Each log is tagged with its source module for better organization
  3. Buffering: Console logs are buffered and sent in batches to reduce network overhead
  4. Server-side: A middleware endpoint receives the logs and outputs them using Vite's logger with module prefixes
  5. Formatting: Logs maintain their original formatting and include stack traces for errors
  6. Error handling: Network failures are handled gracefully without breaking your application

Simple Error Handling

The plugin includes simple, robust error handling for when the development server is unavailable:

  • Silent failures: By default, connection errors are silent to avoid console noise (set silentOnError: false to see errors)
  • Graceful degradation: Failed requests are simply ignored, your application continues normally
  • No retry complexity: Keeps the implementation simple and predictable

This ensures your application continues to work normally even when the dev server is down, without generating ERR_CONNECTION_REFUSED errors in the browser console.

License

MIT