How to use the Deno `std` library in NodeJS projects
2 min read
496 words
Hey there, NodeJS folks! Ever found yourself wishing you could use some of Deno's standard library features in your NodeJS project? Well, you're in luck! Today we're going to explore how to bring the best of both worlds together. Let's dive in!
Although the std
library is primarily developed by the Deno maintainers, most
of the modules are simply ESM modules that are not tied to the Deno runtime.
They're usable in many other runtimes and even in the browser. Let's see how you
can use these modules in your NodeJS project.
Locating the std
library and it's modules
The std
library is actively hosted on JSR, which is a package registry similar
to npm. The good thing about JSR is that it only supports ESM modules. This way
you can be sure that it is usable in modern NodeJS projects. To find them, go to
jsr.io/@std/ and check out the available modules.
Installing and Importing Modules in NodeJS from JSR
To then use your desired module, JSR gives you a great hint and even the
commands needed to set up the std
module with your preferred package manager.
In this case, we'll use npm
since it's pretty much installed on every machine
where NodeJS is installed.
Let's say we are trying to set up an HTTP call that we want to make reliable
because we are contacting a source that may not be 100% available. The
@std/async
package has a retry
method, which gives us a handy way to get a promise with a built-in retry
mechanism that will try to contact the source n
times before throwing an
error.
Let's set this up. First, we need to install our @std/async
package from JSR.
The docs tells us to
npx jsr add @std/async
Use the @std/async
module in NodeJS
If you’re not using a bundler or build tool that makes it possible to use ES
modules be sure to set your "type": "module"
in your package.json
.
After running the command, we can see what the npx
command does for us. As
expected, it downloads the necessary files to our node_modules
folder, adds an
entry to our package.json
as "@std/async": "npm:@jsr/std__async@^1.0.0-rc.2"
and (if not already there) add a .npmrc
telling npm where to look for the
@jsr
registry: @jsr:registry=https://npm.jsr.io
.
Now to use our retry
function, take the following code as an example to see
how it works:
import { retry } from "@std/async
const fetch = async () => {
throw new Error("error");
}
const main = async () => {
try {
await retry(fetch, { maxAttempts: 3 });
} catch (e) {
console.error(e.message)
}
}
main();
This is the whole magic of setting up the std
library in your NodeJS, pretty
simple right? So go ahead and give it a try in your NodeJS project.
Thanks for reading & have a nice day! 👋
Niklas