@web-engine-dev/asset-pipeline
Build-time asset processing pipeline for game engines. Supports importers, processors, and incremental builds.
Features
- Asset Importers: Load various asset formats
- Asset Processors: Transform and optimize assets
- Incremental Builds: Only rebuild changed assets
- Dependency Tracking: Automatic rebuild on deps change
- Plugin System: Extensible importer/processor plugins
Installation
bash
npm install @web-engine-dev/asset-pipeline
# or
pnpm add @web-engine-dev/asset-pipelineQuick Start
typescript
import { AssetPipeline, TextureImporter, TextureProcessor } from '@web-engine-dev/asset-pipeline';
// Create pipeline
const pipeline = new AssetPipeline({
inputDir: './assets',
outputDir: './dist/assets',
cacheDir: './.asset-cache',
});
// Register importers
pipeline.registerImporter('.png', new TextureImporter());
pipeline.registerImporter('.jpg', new TextureImporter());
// Register processors
pipeline.registerProcessor(
'texture',
new TextureProcessor({
maxSize: 2048,
generateMipmaps: true,
compress: true,
})
);
// Build all assets
await pipeline.build();
// Watch for changes
pipeline.watch();API Overview
Asset Pipeline
| Method | Description |
|---|---|
registerImporter() | Add file type importer |
registerProcessor() | Add asset processor |
build() | Build all assets |
buildFile(path) | Build single file |
watch() | Watch and rebuild on change |
clean() | Clear cache and outputs |
Custom Importer
typescript
class ModelImporter implements AssetImporter {
async import(path: string): Promise<AssetData> {
const data = await loadGLTF(path);
return {
type: 'model',
data: data,
dependencies: data.textures,
};
}
}Custom Processor
typescript
class TextureProcessor implements AssetProcessor {
async process(asset: AssetData): Promise<ProcessedAsset> {
const optimized = await optimizeTexture(asset.data);
return {
...asset,
data: optimized,
metadata: { format: 'webp', mips: 8 },
};
}
}Incremental Builds
typescript
// First build - processes all assets
await pipeline.build();
// Second build - only processes changed files
await pipeline.build();
// Force full rebuild
await pipeline.build({ force: true });