Deno wrapper
🦕 Like ./gradlew, but for Deno

🦕 Downloads a pinned version of Deno
📂 Caches Deno installation in the .deno folder
🌟 Works best when placed at the root of your project as ./denow
👤 Users don’t need to install deno globally
Installation
Find your existing Deno project, then run:
deno run -A https://deno.land/x/deno_wrapper/cli.tsYou can add a vN.N.N argument to download a specific version. By default we
use the Deno.version.deno version.
deno run -A https://deno.land/x/deno_wrapper/cli.ts 1.30.0This CLI will create the wrapper scripts as ./denow for POSIX and
./denow.bat for Windows.
You can also use deno install to install deno-wrapper globally. Then, you
can just use the deno-wrapper CLI in whatever project you want.
deno install -A https://deno.land/x/deno_wrapper/cli.ts
deno-wrapper 1.30.0Usage
Just use ./denow as though it were the true deno binary! Anyone who clones
your repo won’t need to install deno themselves; the ./denow will auto-install
a local copy into the .deno folder.
⚠️ Make sure you add .deno to your .gitignore! That’s where deno will be
installed to by the wrapper.
./denow --help
./denow eval 'console.log(42)'
./denow fmt
./denow task mytask
./denow compile --allow-read --allow-net https://deno.land/std/http/file_server.ts
./denow run --allow-net https://examples.deno.land/http-server.ts
./denow run -A src/index.tsIf you want to update the version of Deno that ./denow downloads and invokes,
you can go through the install steps (above) again to pin to a different
version. Be aware that this will overwrite the ./denow and ./denow.bat
files. You can also inspect the generated ./deno and ./deno.bat files to see
what version of Deno they are invoking and change it manually.
Why?
Sometimes (not often, but sometimes), you want to have an auto-install wrapper around a project-critical binary. In a nutshell you gain the following benefits:
Standardizes a project on a given Deno version, leading to more reliable and robust builds.
Provisioning a new Deno version to different users and execution environment (e.g. IDEs or Continuous Integration servers) is as simple as changing the Wrapper definition.
For instance, GitHub Actions can be written using Deno, but how do you make sure
deno is available on the GitHub Action runner? You can use ./denow (or
./denow.bat) as a proxy!
Why not just download the deno binary as ./deno?
Because the Deno binary is >100MB, which is more than most version control systems want to deal with. GitHub will even block files larger than 100MB!
Development
The main denow script is written in POSIX shell code. That means things like
if [[ $hello == world ]] are off the table. Only POSIX-compatible things are
allowed. The cli.ts file is the deno-wrapper CLI script that replaces the
{{version}} CookieCutter-like variable in deno with the actual version that
the user wants (when they run the deno-wrapper CLI they pin the version). We
use GitHub Actions to test the denow script (and the denow.bat script) on
Ubuntu, macOS, and Windows.