Я попробовал два инструмента для сабжа — esbuild и rollup.

esbuild типа быстрый, написан на Go и автономный, не нужен npm, чтобы его поставить. Еще импонирует, что проблемные импорты, ведущие в никуда, он рапортует и требует явно обозначить. Однако в итоге в итоге его побороть не получилось.

Итоговый JS-модуль для поиска, сгенерированный Koka, увы, был не очень высокого качества из-за того, как я понял, что у таргета нет четкого разделения между фронтом и бэком с нодой. Я пробовал пометить нодовские модули (os, fs) как внешние, пометить импорты Koka как внешние, выбрать platform=node и даже руками удалить “неправильные” импорты, но ничего не помогло: undefined в итоговом скрипте.

Rollup сработал с первого раза, и размер бандла получился меньше. Однако он менее строг, и что было ошибкой у esbuild, у него было просто предупреждением. И автономного варианта нет — только npm install (впрочем, распространенная проблема для JS экосистемы).