My DenoJS Learning Journals: Installation and First Try
Tags: deno, chocolatey, windows, typescript
Published: 2020-06-16 17:46:14

DenoJS is the 'new' javascript that initialy released in 2018, made by the creator of NodeJS, Ryan Dahl. DenoJS was made to 'start over' the NodeJS without the things that Ryan Dahl regretting in creating the NodeJS.

So this 'language' is getting NodeJS developers' attention and made them curious about what great about the platform itself and the differences to the NodeJS, including me.

Then I decided to try it myself and make a series about this learning.

___________________

## The Installation of Deno

Because I'm using Windows on my machine, so I think the best way to install it is by using [Chocolatey](https://chocolatey.org/). I have Chocolatey installed on my machine. By following the official installation [guide](https://deno.land/#installation), I just need to open the PowerShell console with Administrator mode and type this command:

```
choco install deno
``` 

And then after it finish installed, I saw this when I type `deno` and ENTER on the console:

```
PS C:\Users\dendi> deno
Deno 1.1.0
exit using ctrl+d or close()
>
```

So I guess it was installed properly and perfectly.

___________________

## The Blind Tries

So what happens if Deno run an `index.js` file with simple script like this?
```
const var1 = 1;
const var2 = 2;

console.log(`${var1} + ${var2} equals to ${var1 + var2}`);
```

And it's still working!

```
PS C:\Users\dendi\playground> deno run .\index.js
1 + 2 equals to 3
```

Because it's stated that Deno is fully-shipped with Typescript, now we try it with the `.ts` extension. So we change the `index.js` filename to `index.ts` and we run it again.

```
PS C:\Users\dendi\playground> deno run .\index.ts
Compile file:///C:/Users/dendi/playground/index.ts
1 + 2 equals to 3
```

Now we see that it has compiling process before the output. Then modify the `index.ts` script and add an actual Typescript syntax like this:

```
const var1: number = 1;
const var2: number = 2;

console.log(`${var1} + ${var2} equals to ${var1 + var2}`);
```

If you try to run the above script with NodeJS, then of course you will get errors because normally in NodeJS we need `typescript` and `ts-node` to compile it first.

And when we run the modified script with Deno, it's get the same output as before.
___________________

## The official's getting started

Let's try with the 'getting started' script to replace the previous `index.ts` here:

```
import { serve } from "https://deno.land/std@0.57.0/http/server.ts";
const s = serve({ port: 8000 });
console.log("http://localhost:8000/");
for await (const req of s) {
  req.respond({ body: "Hello World\n" });
}
```

When I ran it I got this:

```
PS C:\Users\dendi\playground> deno run .\index.ts
Download https://deno.land/std@0.57.0/http/server.ts
Download https://deno.land/std@0.57.0/encoding/utf8.ts
Download https://deno.land/std@0.57.0/io/bufio.ts
Download https://deno.land/std@0.57.0/_util/assert.ts
Download https://deno.land/std@0.57.0/async/mod.ts
Download https://deno.land/std@0.57.0/http/_io.ts
Download https://deno.land/std@0.57.0/io/util.ts
Download https://deno.land/std@0.57.0/textproto/mod.ts
Download https://deno.land/std@0.57.0/http/http_status.ts
Download https://deno.land/std@0.57.0/async/deferred.ts
Download https://deno.land/std@0.57.0/async/delay.ts
Download https://deno.land/std@0.57.0/async/mux_async_iterator.ts
Download https://deno.land/std@0.57.0/bytes/mod.ts
Download https://deno.land/std@0.57.0/path/mod.ts
Download https://deno.land/std@0.57.0/path/_constants.ts
Download https://deno.land/std@0.57.0/path/win32.ts
Download https://deno.land/std@0.57.0/path/posix.ts
Download https://deno.land/std@0.57.0/path/common.ts
Download https://deno.land/std@0.57.0/path/separator.ts
Download https://deno.land/std@0.57.0/path/_interface.ts
Download https://deno.land/std@0.57.0/path/glob.ts
Download https://deno.land/std@0.57.0/path/_util.ts
Download https://deno.land/std@0.57.0/path/_globrex.ts
Compile file:///C:/Users/dendi/playground/index.ts
error: Uncaught PermissionDenied: network access to "0.0.0.0:8000", run again with the --allow-net flag
    at unwrapResponse ($deno$/ops/dispatch_json.ts:43:11)
    at Object.sendSync ($deno$/ops/dispatch_json.ts:72:10)
    at Object.listen ($deno$/ops/net.ts:51:10)
    at listen ($deno$/net.ts:154:22)
    at serve (https://deno.land/std@0.57.0/http/server.ts:260:20)
    at file:///C:/Users/dendi/playground/index.ts:2:11
```

I ran it again with `deno run .\index.ts --allow-net` and it still gives the same errors. And of course, I googled it. Then the right command to do it is:

```
deno run --allow-net .\index.ts
```

Then you will have the your `Hello world` on [http://localhost:8000/](http://localhost:8000/).

I conclude that the script uses `http` module to run the server. The module was downloaded at first execution, and I though it will always need the online network to run everytime but actually no. So I guess the module was stored somewhere on my machine and I will find the whereabouts later.

Okay, that's enough for the installation and first try of DenoJS.

___________________