Nodemon for Deno

Nodemon for Deno

Update: As of Deno v1.4, there is a built in watch mode that you can enable with the --watch flag. Read more about that here.

Nodemon, or as I read it in my head Nodémon!, is a utility for restarting Node.js processes when the source changes. It’s is the first dev dependency I add when working in Node, because it is so handy!

Deno, the secure runtime for JavaScript and TypeScript, doesn’t work with Nodemon. When I first started building with Deno, I was reminded just how annoying it is to stop and start your server whenever there is a change.

Enter denon, the “replacement” for Nodemon in Deno land. As long as you’re using deno@^1.0.1, you can get all the goodness of automattic restarting with denon.

Install

You can install denon with Deno’s install command:

deno install --allow-read --allow-run --allow-write --allow-net -f --unstable https://deno.land/x/denon@v2.2.0/denon.ts

That command installs denon version 2.2.0, so reference the documentation for the most up-to-date instructions.

Simple usage

Once you have denon installed, you can use it as a straight replacement for all deno commands:

# With Deno
deno run --allow-net https://deno.land/std/examples/echo_server.ts

# With denon
denon run --allow-net https://deno.land/std/examples/echo_server.ts

This is the same behavior as node/nodemon. But running external code doesn’t really illustrate the value of denon.

To see it in action, copy echo_server.ts locally and then run with denon:

denon run --allow-net echo_server.ts

Now when you make any changes to the source, you will see denon automatically restart the server.

Configuration

My favorite feature of denon is its configuration file: denon.json. With it, you get some of the “scripts” features of Node.js’s package.json that are currently missing in Deno.

To create a configuration file, you can call denon with the --init flag:

denon --init

This will create a denon.json file where you can include scripts with commands, permissions, and environment variables.

We can create a “start” script for the echo_server.ts like so:

{
"$schema": "https://deno.land/x/denon/schema.json",
"scripts": {
"start": {
"cmd": "deno run echo_server.ts",
"desc": "Start echo_server in watch mode",
"allow": ["env", "net"],
"env": {
"PORT": "2525"
}
}
}
}

Our “start” script has a command, description, permissions to allow, and an environment variable PORT that we are passing to our server.

To run the script, type:

denon start

And you’re off to the races! I love the ability to start a Deno process without typing all those permissions. :chefs-kiss:

Learn more

The denon documentation lists the full feature set and includes a bunch of helpful examples. Make sure to check that out when setting up denon on your next Deno project.

Happy coding!

About

Sean McPherson

My name is Sean McPherson (SeanMcP), and I am a software engineer and educator in Pittsburgh, PA. I have given conference talks, lead workshops, and organized meetups. Here I write articles about programming for developers of all levels.