Is there any way to convert a Node project to Deno?
Asked Answered
S

4

14

I want to convert a Node.js project to Deno. Is there any guide available?

My current project has lots of NPM files and it's already in TypeScript.

Any tips?

Sizemore answered 13/5, 2020 at 8:53 Comment(0)
H
10

As of Deno 1.25 there's an experimental NPM support by using npm: specifier

How to use npm module in DENO?


Deno and Node.js APIs are not compatible, of course you will be able to reuse all javascript/typescript code but you'll need to refactor or add polyfills.

To ease migration Deno provides a Node Compatibility library, std/node, which still needs a lot of work.

Fortunately require is one of the already supported polyfills

import { createRequire } from "https://deno.land/std/node/module.ts";

const require = createRequire(import.meta.url);
// Loads native module polyfill.
const path = require("path");
// Visits node_modules.
const leftPad = require("left-pad");

console.log(leftPad('5', 5, '0'))

If you run that example:

npm i left-pad
deno run --allow-read node.js
// 00005

As you can see left-pad was loaded correctly from node_modules/. So for NPM packages that do not rely on Node.js API, you can easily require them using std/node.

Here's a list of all supported modules


Right now, for the packages that rely heavily on Node.js API, the best thing you can do is rewrite them using Deno API.

As the project matures there will be easier ways to convert a Node.js project to Deno.

IMO for big projects working perfectly on Node.js it's not worth it to migrate them. Deno & Node.js can live together it's not one or the other. Build new projects on Deno if you prefer instead of migrating old ones.

Hera answered 13/5, 2020 at 9:11 Comment(0)
E
9

Check out Denoify, it's a build tool that does what you want. You don't have to write the port the tool do it for you, it is all detailed in the docs.

Disclosure: I am the author.

repo

Explicit answered 16/5, 2020 at 12:50 Comment(0)
D
0

Starting from Deno v1.15 there is Node.js compatibility mode which is unstable and comes with some caveats. There is also an issue in the repo tracking the progress of the Node Compat mode.

Quoting from the docs

Node.js compability mode

Starting with v1.15 Deno provides Node compatiblity mode that makes it possible to run a subset of programs authored for Node.js directly in Deno. Compatiblity mode can be activated by passing --compat flag in CLI.

⚠️ Using compatiblity mode currently requires the --unstable flag. If you intend to use CJS modules, the --allow-read flag is needed as well.

⚠️ Package management is currently out of scope for Node.js compatiblity mode. For the time being we suggest to keep using your current solution (npm, yarn, pnpm).

Please checkout the docs for

Degrease answered 17/12, 2021 at 2:34 Comment(0)
V
-1

denoify demo:

#! /bin/sh

cd $(mktemp -d)
npm init -y
sed -i 's|"main": "index.js"|"main": "src/index.ts"|' package.json
mkdir src

cat >src/index.ts <<'EOF'
import { writeSync } from 'fs'
writeSync(1, "hello world\n")
EOF

echo '{"compilerOptions": { "outDir": "out" }}' >tsconfig.json
npm install denoify
npx denoify
deno run --allow-env=NODE_DEBUG deno_out/index.ts

input: src/index.ts

import { writeSync } from 'fs'
writeSync(1, "hello world\n")

output: deno_out/index.ts

import { writeSync } from 'https://deno.land/[email protected]/node/fs.ts'
writeSync(1, "hello world\n")
Versicolor answered 15/10, 2022 at 10:2 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.