@alshdavid/mach
v0.0.70
Published
<h1 align="center">ποΈ <img height="40px" align="center" src="./.docs/assets/logo.svg"></img> π</h1>
Downloads
73
Readme
Installation
You can install Mach from npm or get the latest binary from the github releases
npm install @alshdavid/mach
npx mach version
Usage
$ mach build ./src/index.html
$ mach dev ./src/index.html #todo
Programmatic Usage
import { Mach } from '@alshdavid/mach'
// Create a Mach instance
const mach = new Mach()
// Build a target
const report = await mach.build({
projectRoot: process.cwd(),
outFolder: 'dist',
entries: ['src/index.js']
})
Supported Types
Mach comes preconfigured with sensible defaults and does not need configuration. Mach ships with built-in support for the most common source files in web development.
- TypeScript
- JavaScript
- JSX and TSX
- CSS
- HTML
- Images (todo)
Plugins
Mach supports plugins that share the ideas and API of Parcel Plugins for cases where bundling must be customized.
- Resolver partial support
- Transformer partial support
- Reporter todo
- Namer todo
Plugins can be written in:
- JavaScript in progress
- Rust (Dynamically Loaded) todo
- Wasm todo
JavaScript Plugins
Import the plugin API from the @alshdavid/mach
npm package
import { Transformer } from '@alshdavid/mach'
Benchmark
Below is a build of the three-js source code multiplied 100 times and reexported from a single entry point. The benchmark was run on an M1 MacBook Pro with optimizations/minification turned off.
Mach is still under development and has lots of known opportunities for further build time improvements π
Remaining work
The goal of Mach 1 will be a super fast production ready bundler with plugin support with some features remaining to be added (for instance - incremental bundling, or caching).
The order of these may change and some may be pushed back to Mach 2
𧩠Prerelease Flyer
- Plugin support
- Minification
𧩠Prerelease Red Baron
- Source Maps
𧩠Prerelease Spitfire
- Watch mode / Auto-recompilation
- Development server
- Hot reload
𧩠Prerelease Mustang
- Bundle splitting (help wanted π©)
𧩠Prerelease Shooting Star
- Incremental Bundling for Development
π Release Candidate X-1
- TBD
π©οΈ Mach 1 - Codenamed Concorde
- TBD
Special Thanks
Benchmarks
The benchmark takes the three-js source code, copies it 50 times, imports the 50 copies from a single entrypoint and measures the time to build.
import * as copy_1 from './copy_1/Three.js'; window.copy_1 = copy_1;
import * as copy_2 from './copy_2/Three.js'; window.copy_2 = copy_2;
import * as copy_3 from './copy_3/Three.js'; window.copy_3 = copy_3;
// ... and so on
The hardware I am using is a desktop AMD 7950x with 16 cores and the builds are using 16 threads.