Skip to content

Commit 38369e7

Browse files
committed
perf(build): use minimal inline PSR-4 autoloader in PHAR
Replace vendored Composer autoloader (which loaded all dev dependencies like amphp/amp, PHPStan, Psalm etc.) with a tiny spl_autoload_register that maps KaririCode\Devkit\* → phar://kcode.phar/src/ directly. Since the project has zero PHP production dependencies, no vendor/ packages are needed inside the PHAR at all. Result: Before: ~30 MB, ~50s build (full vendor/ scan) After: 0.03 MB, 0.07s build (38 src + 1 autoloader = 41 files total) kcode --help: working correctly
1 parent 70adb48 commit 38369e7

1 file changed

Lines changed: 18 additions & 21 deletions

File tree

bin/build-phar.php

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -32,28 +32,25 @@
3232
}
3333
echo " + src/: $added PHP files\n";
3434

35-
// ── 2. Add vendor/composer/ autoload files only ────────────
36-
// No PHP production dependencies — only the generated autoloader is needed.
37-
$autoloadFiles = [
38-
'vendor/autoload.php',
39-
'vendor/composer/autoload_classmap.php',
40-
'vendor/composer/autoload_namespaces.php',
41-
'vendor/composer/autoload_psr4.php',
42-
'vendor/composer/autoload_real.php',
43-
'vendor/composer/autoload_static.php',
44-
'vendor/composer/ClassLoader.php',
45-
'vendor/composer/platform_check.php',
46-
];
47-
48-
$vendorAdded = 0;
49-
foreach ($autoloadFiles as $rel) {
50-
$abs = $root . '/' . $rel;
51-
if (file_exists($abs)) {
52-
$phar[$rel] = file_get_contents($abs);
53-
$vendorAdded++;
35+
// ── 2. Minimal PSR-4 autoloader (no Composer vendor/ needed) ─
36+
// The project has zero PHP production dependencies.
37+
// We generate a lean autoloader that maps KaririCode\Devkit → src/.
38+
$autoloader = <<<'PHP'
39+
<?php
40+
spl_autoload_register(static function (string $class): void {
41+
$prefix = 'KaririCode\\Devkit\\';
42+
if (!str_starts_with($class, $prefix)) {
43+
return;
5444
}
55-
}
56-
echo " + vendor/composer/: $vendorAdded autoload files\n";
45+
$relative = substr($class, strlen($prefix));
46+
$file = 'phar://kcode.phar/src/' . str_replace('\\', '/', $relative) . '.php';
47+
if (is_file($file)) {
48+
require $file;
49+
}
50+
});
51+
PHP;
52+
$phar['vendor/autoload.php'] = $autoloader;
53+
echo " + vendor/autoload.php: inline PSR-4 autoloader\n";
5754

5855

5956
// ── 3. Add LICENSE ──────────────────────────────────────────

0 commit comments

Comments
 (0)