Skip to content

Delightful, purely declarative esbuild configurations

License

Notifications You must be signed in to change notification settings

idleberg/node-cosby

Repository files navigation

@idleberg/cosby

Delightful esbuild configurations.

License Version: npm GitHub branch check runs

Cosby allows bundling with esbuild while using familiar configuration files, such as esbuild.config.json or esbuild.config.ts.

Note

Sounds familiar? This projects has its roots in a similar project called cosmic-esbuild. With cosby, the main goal was a simplified API while providing more powerful features. But let's read on!

Features

Installation 💿

npm install @idleberg/cosby

Usage 🚀

Configuration

Supported file formats
  • esbuild.config.js
  • esbuild.config.ts
  • esbuild.config.mjs
  • esbuild.config.cjs
  • esbuild.config.mts
  • esbuild.config.cts
  • esbuild.config.json
  • esbuild.config.jsonc
  • esbuild.config.json5
  • esbuild.config.yaml
  • esbuild.config.yml
  • esbuild.config.toml

Using the --package-json flag, you can load the configuration from the package manifests' esbuild field.

Example of a fully typed configuration:

TypeScript

import { defineConfig } from '@idleberg/cosby';

export default defineConfig({
	bundle: true,
	entryPoints: ['app.js'],
	outdir: 'dist',
	sourcemap: 'external',
});

Example of a purely declarative configuration:

JSON

{
	"bundle": true,
	"entryPoints": ["app.js"],
	"outdir": "dist",
	"sourcemap": "external"
}

CLI

Run from command-line or script.

# Build
npx cosby

# Watch for changes
npx cosby --watch

See npx cosby --help for available options.

Advanced Features

Extending Configuration

In a monorepo, you often want to extend from a base configuration:

export default defineConfig({
	"extends": "../base",
});

Extend from a remote git source:

export default defineConfig({
	"extends": "gh:user/repo#branch",
}):

Dotenv

Run npx cosby --dotenv .env to load environment variables from a file:

export default defineConfig({
	minify: process.env.NODE_ENV !== 'development',
})

Environment-specific configuration

You can define environment-specific configuration using these config keys:

  • $test: {...}
  • $development: {...}
  • $production: {...}
  • $env: { [env]: {...} }

Run npx cosby --env-name production to apply the overrides for production:

export default defineConfig({
	minify: false,
	sourcemap: 'external',

	$test: {
		minify: true,
	},
	
	$production: {
		minify: true,
		sourcemap: false,
	},
})

Related 👫

If this project is not for you, maybe these alternatives suit you better:

License©️

This work is licensed under The MIT License.

About

Delightful, purely declarative esbuild configurations

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published