Script installer

Deno provides deno install to easily install and distribute executable code.

deno install [OPTIONS...] [URL] [SCRIPT_ARGS...] will install the script available at URL under the name EXE_NAME.

This command creates a thin, executable shell script which invokes deno using the specified CLI flags and main module. It is placed in the installation root's bin directory.

Example:

$ deno install --allow-net --allow-read https://deno.land/std@$STD_VERSION/http/file_server.ts
[1/1] Compiling https://deno.land/std@$STD_VERSION/http/file_server.ts

✅ Successfully installed file_server.
/Users/deno/.deno/bin/file_server

To change the executable name, use -n/--name:

deno install --allow-net --allow-read -n serve https://deno.land/std@$STD_VERSION/http/file_server.ts

The executable name is inferred by default:

To change the installation root, use --root:

deno install --allow-net --allow-read --root /usr/local https://deno.land/std@$STD_VERSION/http/file_server.ts

The installation root is determined, in order of precedence:

These must be added to the path manually if required.

echo 'export PATH="$HOME/.deno/bin:$PATH"' >> ~/.bashrc

You must specify permissions that will be used to run the script at installation time.

deno install --allow-net --allow-read https://deno.land/std@$STD_VERSION/http/file_server.ts -p 8080

The above command creates an executable called file_server that runs with network and read permissions and binds to port 8080.

For good practice, use the import.meta.main idiom to specify the entry point in an executable script.

Example:

// https://example.com/awesome/cli.ts
async function myAwesomeCli(): Promise<void> {
  -- snip --
}

if (import.meta.main) {
  myAwesomeCli();
}

When you create an executable script make sure to let users know by adding an example installation command to your repository:

# Install using deno install

$ deno install -n awesome_cli https://example.com/awesome/cli.ts

Uninstall

You can uninstall the script with deno uninstall command.

$ deno uninstall file_server
deleted /Users/deno/.deno/bin/file_server
✅ Successfully uninstalled file_server

See deno uninstall -h for more details.