🎯 Ejemplos recomendados
Balanced sample collections from various categories for you to explore
Ejemplos de esbuild Bundler
Ejemplos de bundler JavaScript moderno incluyendo configuración, plugins, optimización, e integración de workflows
💻 Configuración Básica de esbuild javascript
🟢 simple
⭐⭐
Configuración completa de esbuild para proyectos JavaScript/TypeScript con CLI y configuración API
⏱️ 15 min
🏷️ esbuild, configuration, setup
Prerequisites:
Node.js, npm/yarn, Basic JavaScript/TypeScript
// esbuild Basic Configuration Setup
// 1. Installation
// npm install esbuild --save-dev
// npm install esbuild-sass-plugin esbuild-plugin-image --save-dev (for additional plugins)
// 2. Command Line Usage Examples
/*
# Basic build
esbuild src/index.js --bundle --outfile=dist/bundle.js
# TypeScript build
esbuild src/index.ts --bundle --outfile=dist/bundle.js --target=es2020
# Watch mode
esbuild src/index.js --bundle --outfile=dist/bundle.js --watch
# Development mode with source maps
esbuild src/index.js --bundle --outfile=dist/bundle.js --sourcemap --define:process.env.NODE_ENV="development"
# Production build with minification
esbuild src/index.ts --bundle --outfile=dist/bundle.min.js --minify --target=es2020
# Multiple entry points
esbuild src/app.js src/worker.js --bundle --outdir=dist
# CSS handling
esbuild src/app.js --bundle --outfile=dist/bundle.js --bundle-css=dist/style.css
# External packages (don't bundle)
esbuild src/app.js --bundle --outfile=dist/bundle.js --external:react --external:react-dom
# Specific target environments
esbuild src/app.js --bundle --outfile=dist/bundle.js --target=chrome58,firefox57,safari11
*/
// 3. Build Script (build.js)
const esbuild = require('esbuild');
const buildOptions = {
entryPoints: ['src/index.ts'],
bundle: true,
outfile: 'dist/index.js',
minify: process.env.NODE_ENV === 'production',
sourcemap: process.env.NODE_ENV !== 'production',
target: 'es2020',
define: {
'process.env.NODE_ENV': `"${process.env.NODE_ENV}"`
},
format: 'esm',
platform: 'browser',
external: [],
loader: {
'.ts': 'ts',
'.tsx': 'tsx',
'.js': 'js',
'.jsx': 'jsx',
'.css': 'css',
'.json': 'json',
'.txt': 'text',
'.png': 'file',
'.jpg': 'file',
'.svg': 'file'
}
};
async function build() {
try {
console.log('Building with esbuild...');
if (process.env.WATCH === 'true') {
// Watch mode
const context = await esbuild.context(buildOptions);
await context.watch();
console.log('Watching for changes...');
} else {
// Single build
const result = await esbuild.build(buildOptions);
if (result.errors.length > 0) {
console.error('Build errors:');
result.errors.forEach(error => console.error(error));
process.exit(1);
}
if (result.warnings.length > 0) {
console.warn('Build warnings:');
result.warnings.forEach(warning => console.warn(warning));
}
console.log('Build completed successfully!');
}
} catch (error) {
console.error('Build failed:', error);
process.exit(1);
}
}
build();
💻 Plugins y Workflow de esbuild javascript
🟡 intermediate
⭐⭐⭐⭐
Desarrollo de plugins avanzados de esbuild, integración de workflow, y técnicas de optimización
⏱️ 35 min
🏷️ esbuild, plugins, workflow, advanced
Prerequisites:
esbuild basics, JavaScript/TypeScript, Build processes
// esbuild Plugins and Workflow Examples
// 1. Custom Plugin Development
// plugins/env-plugin.js
const envPlugin = (options = {}) => ({
name: 'env',
setup(build) {
build.onResolve({ filter: /^env:/ }, (args) => {
return {
path: args.path.replace('env:', ''),
namespace: 'env-ns'
};
});
build.onLoad({ filter: /.*/, namespace: 'env-ns' }, (args) => {
const envVar = process.env[args.path] || options.default || '';
return {
contents: `export default ${JSON.stringify(envVar)};`,
loader: 'js'
};
});
}
});
// 2. File Copy Plugin
// plugins/copy-plugin.js
const path = require('path');
const fs = require('fs');
const copyPlugin = (patterns = []) => ({
name: 'copy',
setup(build) {
build.onEnd(() => {
patterns.forEach(({ from, to }) => {
const srcPath = path.resolve(from);
const destPath = path.resolve(to);
if (fs.existsSync(srcPath)) {
fs.mkdirSync(path.dirname(destPath), { recursive: true });
fs.copyFileSync(srcPath, destPath);
console.log(`Copied ${srcPath} to ${destPath}`);
}
});
});
}
});
// 3. Image Optimization Plugin
// plugins/image-plugin.js
const fs = require('fs');
const path = require('path');
const { createHash } = require('crypto');
const imagePlugin = (options = {}) => ({
name: 'image',
setup(build) {
build.onResolve({ filter: /\.(png|jpg|jpeg|gif|webp)$/ }, (args) => {
const resolvedPath = path.resolve(args.resolveDir, args.path);
return {
path: resolvedPath,
namespace: 'image-file'
};
});
build.onLoad({ filter: /\.(png|jpg|jpeg|gif|webp)$/, namespace: 'image-file' }, async (args) => {
const contents = fs.readFileSync(args.path);
const hash = createHash('md5').update(contents).digest('hex').slice(0, 8);
const ext = path.extname(args.path);
const fileName = `image-${hash}${ext}`;
const publicDir = options.publicDir || 'public/assets';
const publicPath = path.join(publicDir, fileName);
// Create output directory if it doesn't exist
fs.mkdirSync(path.dirname(publicPath), { recursive: true });
fs.writeFileSync(publicPath, contents);
const importPath = `/${publicPath}`;
return {
contents: `export default ${JSON.stringify(importPath)};`,
loader: 'js'
};
});
}
});
// 4. Advanced Build Configuration with Plugins
// advanced-build.js
const esbuild = require('esbuild');
const path = require('path');
// Import custom plugins
const { envPlugin } = require('./plugins/env-plugin');
const { copyPlugin } = require('./plugins/copy-plugin');
const { imagePlugin } = require('./plugins/image-plugin');
const buildConfig = {
entryPoints: ['src/index.tsx', 'src/styles/main.css'],
bundle: true,
outdir: 'dist',
minify: process.env.NODE_ENV === 'production',
sourcemap: process.env.NODE_ENV !== 'production',
target: 'es2020',
define: {
'process.env.NODE_ENV': `"${process.env.NODE_ENV}"`
},
loader: {
'.ts': 'ts',
'.tsx': 'tsx',
'.jsx': 'jsx',
'.css': 'css'
},
plugins: [
imagePlugin({
publicDir: 'dist/assets'
}),
envPlugin({
default: {
API_URL: 'http://localhost:3001'
}
}),
copyPlugin([
{ from: 'public/index.html', to: 'dist/index.html' },
{ from: 'public/favicon.ico', to: 'dist/favicon.ico' }
])
]
};
async function build() {
try {
console.log('🚀 Starting advanced build...');
const result = await esbuild.build(buildConfig);
if (result.errors.length === 0) {
console.log('✅ Build completed successfully!');
} else {
console.error('❌ Build failed with errors:');
result.errors.forEach(error => console.error(error));
}
} catch (error) {
console.error('💥 Build error:', error);
process.exit(1);
}
}
build();
💻 Integración de esbuild con Frameworks javascript
🔴 complex
⭐⭐⭐⭐⭐
Integración de esbuild con frameworks populares incluyendo React, Vue, Node.js, y herramientas modernas
⏱️ 45 min
🏷️ esbuild, frameworks, integration, advanced
Prerequisites:
Advanced esbuild, Modern frameworks, TypeScript
// esbuild Integration with Modern Frameworks
// 1. React + TypeScript Integration
// build/react.config.js
const esbuild = require('esbuild');
const path = require('path');
const reactConfig = {
entryPoints: {
main: 'src/index.tsx',
'service-worker': 'src/sw.ts'
},
bundle: true,
outdir: 'dist',
minify: process.env.NODE_ENV === 'production',
sourcemap: process.env.NODE_ENV !== 'production',
target: ['es2020', 'chrome91', 'firefox90', 'safari14'],
define: {
'process.env.NODE_ENV': `"${process.env.NODE_ENV}"`,
'process.env.REACT_APP_VERSION': `"${require('./package.json').version}"`
},
loader: {
'.ts': 'ts',
'.tsx': 'tsx',
'.jsx': 'jsx'
},
jsxFactory: 'React.createElement',
jsxFragment: 'React.Fragment',
inject: [
path.resolve(__dirname, 'src/shim/react.js')
]
};
// 2. Vue 3 + TypeScript Integration
// build/vue.config.js
const esbuild = require('esbuild');
const path = require('path');
const vueConfig = {
entryPoints: ['src/main.ts'],
bundle: true,
outfile: 'dist/app.js',
minify: process.env.NODE_ENV === 'production',
sourcemap: process.env.NODE_ENV !== 'production',
target: ['es2020', 'chrome91', 'firefox90', 'safari14'],
define: {
'process.env.NODE_ENV': `"${process.env.NODE_ENV}"`,
'__VUE_OPTIONS_API__': 'true',
'__VUE_PROD_DEVTOOLS__': 'false'
}
};
// 3. Express.js + TypeScript Backend
// build/backend.config.js
const esbuild = require('esbuild');
const path = require('path');
const backendConfig = {
entryPoints: {
app: 'src/index.ts',
'generate-types': 'src/scripts/generate-types.ts'
},
bundle: true,
outdir: 'dist',
minify: process.env.NODE_ENV === 'production',
sourcemap: process.env.NODE_ENV !== 'production',
target: 'node18',
platform: 'node',
format: 'cjs',
define: {
'process.env.NODE_ENV': `"${process.env.NODE_ENV}"`
},
external: [
'aws-sdk',
'pg',
'mysql2',
'mongodb',
'redis',
'bull',
'nodemailer',
'sharp',
'prisma'
]
};
// 4. Electron + React Integration
// build/electron.config.js
const esbuild = require('esbuild');
const path = require('path');
class ElectronBuilder {
async build() {
console.log('🔨 Building Electron app...');
// Build main process
await this.buildMain();
// Build renderer process
await this.buildRenderer();
console.log('✅ Electron build completed!');
}
async buildMain() {
const mainConfig = {
entryPoints: ['src/main/index.ts'],
bundle: true,
outfile: 'dist/main/index.js',
minify: process.env.NODE_ENV === 'production',
sourcemap: false,
target: 'node18',
platform: 'node',
format: 'cjs',
external: ['electron'],
define: {
'process.env.NODE_ENV': `"${process.env.NODE_ENV}"`
}
};
await esbuild.build(mainConfig);
}
async buildRenderer() {
const rendererConfig = {
entryPoints: ['src/renderer/index.tsx'],
bundle: true,
outfile: 'dist/renderer/index.js',
minify: process.env.NODE_ENV === 'production',
sourcemap: process.env.NODE_ENV !== 'production',
target: ['es2020', 'chrome91', 'firefox90', 'safari14'],
platform: 'browser',
format: 'esm',
jsxFactory: 'React.createElement',
jsxFragment: 'React.Fragment',
define: {
'process.env.NODE_ENV': `"${process.env.NODE_ENV}"`
}
};
await esbuild.build(rendererConfig);
}
}
// 5. Svelte + TypeScript Integration
// build/svelte.config.js
const esbuild = require('esbuild');
const svelteConfig = {
entryPoints: ['src/main.ts'],
bundle: true,
outfile: 'dist/app.js',
minify: process.env.NODE_ENV === 'production',
sourcemap: process.env.NODE_ENV !== 'production',
target: ['es2020', 'chrome91', 'firefox90', 'safari14'],
define: {
'process.env.NODE_ENV': `"${process.env.NODE_ENV}"`
}
};
// Export configurations for use
module.exports = {
reactConfig,
vueConfig,
backendConfig,
svelteConfig,
ElectronBuilder
};