-
@ganesha/oxc
: based on Oxc, the Oxidation Compiler. Fast but no source maps yet (see oxc#1045) -
@ganesha/esbuild-wasm
: based on esbuild. Slower (~2.5x), but source maps work out of the box. May dump Go stack trace to console (see esbuild#1662 and go#59099) -
@ganesha/esbuild
: based on esbuild. Depends on native binary, but unaffected by the above esbuild-wasm issue. -
@ganesha/ezno
: possible future support for ezno is under consideration. -
@ganesha/swc
: possible future support for swc is under consideration.
TODO, contributions welcome.
Install with:
npm i --save @ganesha/oxc # or @ganesha/esbuild
Use from shell:
node --import @ganesha/oxc ./my-program.ts # or @ganesha/esbuild
Use from script:
await import("@ganesha/oxc") // or @ganesha/esbuild
await import("./my-program") // note that it works with no extension
The TypeScript program in question:
// my-program.ts
import { Foo } from './another-ts-module' // no extension required!
import { Bar } from './a-raw-js-module.js' // import from JS with extension
And it works both ways:
// my-program.js
import { Foo } from './another-ts-module.ts' // extension optional but preferred
TODO.
For faster loading, Ganesha provides a cache based on cacache
.
This cache is controlled by the following environment variables:
GANESHA_CACHE_PATH
: path to cache storeGANESHA_CACHE_OFF
: set this to a non-empty value to disable caching
The cache store path defaults to a subdirectory of the user's cache root,
as returned by @folder/xdg
.
For example, on desktop Linux, this would be ~/.cache/ganesha-v5
To disable caching globally (for a given store path), you can write a file in place of the caching directory, e.g.:
rm -rf ~/.cache/ganesha-v5
echo "delete this file to reenable caching" > ~/.cache/ganesha-v5
To see what Ganesha is doing:
GANESHA_DEBUG
: set this environment variable to enable logging to stderr.
TODO.
At Hack.bg, we primarily use Ganesha for developing Fadroma, a cross-chain framework for the CosmWasm ecosystem.
When it's time to publish a package, we switch over to Ubik,
a complementary tool for publishing well-formed ESM packages from TypeScript while avoiding
the nastiness of how tsc
chooses to (more like "refuses to") handle extensions
of import
ed modules.
"The very day I was born I made my first mistake,
and by that path have I sought wisdom ever since."
- William Buck's retelling of the Mahabharata (source)