DEV Community

Jota Feldmann
Jota Feldmann

Posted on Edited on

Converting a Node project to Deno

I was intrigued to test Ryan Dhal's Deno and nothing better than some personal project to make it right.

Deno

Some important stuff before:

Remove all NPM files and node_modules

You don't need anything more than Deno, but some tasks will be converted to some Deno "out of the box" command (e.g. deno test), and for others, I'll use a Makefile for convenience.

Add file extensions to imports

Add .ts to all import statements.

One easy way using VS Code "search and replace":

  • Enable regex
  • For Search field use from (.+?)(?=.ts')
  • For Replace field use from $1.ts Alt Text

Fix parser warnings and adapt the logic

Deno uses strict guidelines using the TypeScript and style guide. It includes some logical/code adaptations.

Optional: convert tests and test task

# Optional Makefile for convenience
test:
    deno test
Enter fullscreen mode Exit fullscreen mode

Convert install task and add the first dependency

Forget npm install. You can use dep.ts, but it's not required. I'm using a Makefile to keep track of all dependencies:

# Optional Makefile for convenience
install:
    deno install --unstable --allow-read --allow-run -f https://deno.land/x/denon/denon.ts;
Enter fullscreen mode Exit fullscreen mode

Convert run and dev tasks (with Denon)

Here I'm using Denon module, the Nodemon for Deno, to watch and reload file changes.

# Optional Makefile for convenience
dev:
    denon $(ENTRY_POINT)
run:
    deno run $(ENTRY_POINT)
Enter fullscreen mode Exit fullscreen mode

Set entry point

Change the entry point file name from index.ts to mod.ts Deno/Rust standard.

Use my project as a template

All these steps are documented on my project: https://github.com/jotafeldmann/elevators/pull/1

Enjoy and, please, send me feedback to improve.

Top comments (11)

Collapse
 
deejaydev profile image
Danjuma Ashiwaju •

@jotafeldmann - thanks for post I have a ReactJs project built with NPM + Webpack that needs to be updated, I would like to take get rid of its dependency on node_moudels and move to a Deno project instead would this be possible with your post as a guideline? if yes would it be a pain to do ie: time-consuming.

Collapse
 
jotafeldmann profile image
Jota Feldmann •

@autodidact_dev , unfortunately, no :( My article covers the aspects of a simple project. For your existent project, check the first links, start with medium.com/@mudgen/porting-node-js...

And please, share your experience as an article, whether possible.

Collapse
 
patarapolw profile image
Pacharapol Withayasakpunt • • Edited

Do I need Makefile, and cmake or something, instead of package.json script section?

Collapse
 
jotafeldmann profile image
Jota Feldmann •

Hi Pacharapol :)

No, you don't need anything, just Deno.

I just use Makefile for convenience in all my projects.

Thanks for the feedback, I will update about it.

Collapse
 
patarapolw profile image
Pacharapol Withayasakpunt • • Edited

But I love scripts section. Otherwise, I often have to write some kind of bash scripts.

*.yaml (like Pubspec.yaml) would be better than package.json, because it supports multi-line shell scripts.

Thread Thread
 
jotafeldmann profile image
Jota Feldmann •

Most of the common tasks come "out of the box" with Deno.

But for more custom/specific stuff (e.g. deploy) you need something like this. I'm using a Makefile for this kind of task.

Collapse
 
5422m4n profile image
Sven Kanoldt •

Nice. Any experience on stability and performance so far? How do you deal with dependencies that are not on Deno.land?

Collapse
 
jotafeldmann profile image
Jota Feldmann •

Hi Sven, thanks for the answer.

Regarding stability and performance, I can't tell due to the humble nature of my personal project.

Regarding the dependencies, I'm putting all stuff inside a make install task.

Collapse
 
5422m4n profile image
Sven Kanoldt •

Thanks for reply.
So your make install task will download and unpack the deps and put them into a local folder from where you use them? Or how does this work in your case?

Thread Thread
 
jotafeldmann profile image
Jota Feldmann •

Deno installs all dependencies in a centralized folder like \home\user\.deno. So we don't need to download every time, for all projects.

What you need to specify is the security flag.

I've made a make install for my convenience, to understand all dependencies of the project and pre-download in case of the production environment.

You can find more info here:

Collapse
 
garronej profile image
Garrone Joseph • • Edited

I think Denoify is worth mentioning here :)

meta