{"id":25264,"library":"esbuild-c","title":"esbuild-c","description":"esbuild-c (v0.1.37) enhances esbuild with config processing capabilities: aligning CLI options with the JS API, supporting config merging via 'extends', and loading configs in various formats (JSON, YAML, JS, TS) using cosmiconfig. As a PoC, it addresses esbuild issue #884 (CLI plugin specification) and offers both CLI and programmatic usage. It requires esbuild >=0.19.0 and ships TypeScript types. Unlike alternatives like esbuild-config or esbuild-resolve-config, it focuses on extendable config merging and format flexibility.","status":"active","version":"0.1.37","language":"javascript","source_language":"en","source_url":"https://github.com/antongolub/misc","tags":["javascript","esbuild","config","build","bundler","typescript"],"install":[{"cmd":"npm install esbuild-c","lang":"bash","label":"npm"},{"cmd":"yarn add esbuild-c","lang":"bash","label":"yarn"},{"cmd":"pnpm add esbuild-c","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency: core bundler that esbuild-c configures","package":"esbuild","optional":false}],"imports":[{"note":"ESM-only since v0.1.x; use dynamic import for CommonJS","wrong":"const { loadConfig } = require('esbuild-c')","symbol":"loadConfig","correct":"import { loadConfig } from 'esbuild-c'"},{"note":"Parses CLI arguments into esbuild build options","wrong":"import { parseArgv } from 'esbuild-c' // correct; no wrong pattern commonly seen","symbol":"parseArgv","correct":"import { parseArgv } from 'esbuild-c'"},{"note":"Default export is the CLI function; not commonly imported directly","wrong":"import * as esbuildC from 'esbuild-c'","symbol":"default (CLI runner)","correct":"import esbuildC from 'esbuild-c'"}],"quickstart":{"code":"// CLI usage: npx esbuild-c --config esbuild.config.js\n\n// Programmatic usage (ESM)\nimport esbuild from 'esbuild';\nimport { loadConfig, parseArgv } from 'esbuild-c';\n\nconst flags = parseArgv(process.argv.slice(2));\nconst config = await loadConfig({\n  // optional overrides: cwd, stopDir, searchPlaces\n});\n\n// Merge flags into config (flags have precedence)\nconst merged = { ...config, ...flags };\n\nawait esbuild.build(merged);\n","lang":"typescript","description":"Shows how to use esbuild-c programmatically: parse CLI args, load config, merge, and build with esbuild."},"warnings":[{"fix":"Pin exact version and monitor GitHub releases for breaking changes.","message":"Package is PoC (Proof of Concept) - API may change between minor versions.","severity":"gotcha","affected_versions":"<0.2"},{"fix":"Specify an explicit --config path to avoid accidental loading.","message":"Config resolution uses cosmiconfig, which searches for 'esbuild' config key in package.json or dedicated files (e.g., esbuild.config.js). Unexpected configs may be loaded.","severity":"gotcha","affected_versions":">=0.0.1"},{"fix":"Use plugin paths or register plugins programmatically.","message":"CLI plugin specification via --plugin flag may require additional setup (see esbuild issue #884).","severity":"gotcha","affected_versions":">=0.0.1"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Ensure esbuild-c and esbuild are installed: npm i -D esbuild-c esbuild. For ESM, set \"type\": \"module\" in package.json or use .mjs extension.","cause":"Package not installed or ESM not fully configured.","error":"Error: Cannot find module 'esbuild-c'"},{"fix":"Use dynamic import: const { loadConfig } = await import('esbuild-c'); or switch to ESM.","cause":"Running import syntax in a CommonJS file without ESM configuration.","error":"SyntaxError: Cannot use import statement outside a module"},{"fix":"Use named import: import { loadConfig } from 'esbuild-c'.","cause":"Incorrect import (e.g., default import instead of named import).","error":"TypeError: loadConfig is not a function"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}