{"id":27644196,"url":"https://github.com/maiconwte/starting-deno","last_synced_at":"2026-05-12T07:39:52.981Z","repository":{"id":123506627,"uuid":"264520730","full_name":"maiconwte/starting-deno","owner":"maiconwte","description":"Deno Introduction :crocodile:","archived":false,"fork":false,"pushed_at":"2020-05-16T20:25:11.000Z","size":3,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-04-17T03:40:48.117Z","etag":null,"topics":["deno","javascript","typescript"],"latest_commit_sha":null,"homepage":"https://www.maiconsilva.com/starting-deno/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maiconwte.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-05-16T20:24:27.000Z","updated_at":"2023-03-09T02:13:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"33151a58-5ef0-40e3-8761-e6fc12dc798c","html_url":"https://github.com/maiconwte/starting-deno","commit_stats":null,"previous_names":["maiconwte/starting-deno","maiconrs95/starting-deno"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/maiconwte/starting-deno","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maiconwte%2Fstarting-deno","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maiconwte%2Fstarting-deno/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maiconwte%2Fstarting-deno/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maiconwte%2Fstarting-deno/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maiconwte","download_url":"https://codeload.github.com/maiconwte/starting-deno/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maiconwte%2Fstarting-deno/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32929255,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-11T17:09:15.040Z","status":"online","status_checked_at":"2026-05-12T02:00:06.338Z","response_time":102,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deno","javascript","typescript"],"created_at":"2025-04-24T00:24:02.170Z","updated_at":"2026-05-12T07:39:52.962Z","avatar_url":"https://github.com/maiconwte.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# O que é o Deno?\n\nDeno é um runtime para JavaScript e TypeScript baseado no V8 e na linguagem de programação Rust. Foi criado por Ryan Dahl, criador original do Node.js, e é focado em segurança e produtividade.\n\nNesse artigo vamos dar uma olhada em algumas features presentes no Deno e também em como ele funciona.\n\n\u003e Segundo o Ryan Dahl, o Denno foi criado para tratar alguns assuntos que ele deverira ter pensado mais quando desenvolveu o nodejs. E NÃO, ele não vai substituir o node.\n\n## Principais caracteristicas\n\n- Seguro por padrão. Sem acesso a arquivos, redes ou ambientes (a menos que seja explicitamente ativado).\n- Possui um runtime TypeScript :\n- Os scripts podem ser agrupados em um único arquivo JavaScript.\n- Construido em [Rust](https://www.rust-lang.org/) (o núcleo de Deno foi escrito em Rust, Node em C ++), [Tokio](https://tokio.rs/) (loop de eventos) e [V8](https://v8.dev/) (runtime JavaScript)\n\n## Deno x Node\n\nO Deno não usa o npm para gerenciar seus módulos. Isso é feito referenciando URLS através do \"ES Modules\".\n\n```javascript\nimport * as log from \"https://deno.land/std/log/mod.ts\";\n```\n\n- Não utiliza ```package.json``` para resolução de módulos\n- Todas as ações assíncronas no Deno retornam uma ```promise```\n- O Deno requer permissões explícitas para acessar arquivos, redes e ambientes\n- Deno sempre morre por erros não capturados\n\n## Preparando o ambiente\n\nA instalação é bem simples, basta seguir a [documentação](https://deno.land/). Como estou no ubunto vou instalar usando Shell (macOS, Linux):\n\n```shell\ncurl -fsSL https://deno.land/x/install/install.sh | sh\n```\n\nNo fim da instalação será mostrado no console a configuração necessária pra utilizar o ```deno``` em seu ambinete.\n\nCaso tenha alguma dúvida você pode consultar [aqui.](https://deno.land/manual/getting_started/setup_your_environment)\n\n### Primerio script\n\nO Deno também é um runtime TypeScript, então para testar eu criei um repositório ```starting-deno``` com o arquivo ```deno.ts```.\n\n```javascript\nlet message: string;\n\nmessage = 'Hello, Maicon!';\n```\n\n```shell\n\u003e deno run deno.ts\n\nCompile file:///home/maicon/Documentos/projects/my-projects/starting-denojs/deno.ts\nHello, Maicon!\n```\n\nLegal, né não? Ele compila o código e depois executa, sem a necessidade de transpiladores de terceiros.\n\n## HTTP e FileSystem\n\nPrimeiro vamos subir um servidor de demonstração pra começar a ver as caracteristicas do deno em ação.\n\nCrie o arquivo server.ts, e então:\n\n```ts\n/** ES Modules */\nimport { serve } from \"https://deno.land/std@0.50.0/http/server.ts\";\n\n/** Create Server */\nconst server = serve({\n    port: 3000\n});\n\nconsole.log(\"http://localhost:3000/\");\n\n/** Async for iterator to listening server requests */\nfor await (const req of server) {\n    req.respond({\n        body: \"Hello World\\n\"\n    });\n}\n```\n\nAo rodar o script server.ts, o deno importa o módulo ```std@0.50.0/http/server.ts``` e salva ele em cache, como a node_modules faz no node.\n\nPara rodar o server basta em seu terminal rodar ```deno run server.ts```\n\nApós o deno transpilar e interpretar os módulos temos um erro no console:\n\n```shell\nerror: Uncaught PermissionDenied: network access to \"0.0.0.0:3000\", run again with the --allow-net flag\n```\n\nIsso aconteceu porque não explicitamos o acesso a rede para o deno com a flag ```--allow-net```.\n\nCriar um servidor ou intepretar um script pode não apresentar muitos riscos, mas esse cenário muda quando estamos executando módulos de terceiros em nossa máquina/servidor, certo?\n\n\u003e A flag --allow-net da a permissão de rede para nosso script, mas ele ainda não tem permissão para ler nem gravar em nosso sitema de arquivos\n\nE se tentarmos ler um arquivo em um script interpretado pelo deno?\n\nPodemos fazer isso utilizando o bom e velho FileSystem:\n\n```javascript\nimport { readJson } from \"https://deno.land/std/fs/mod.ts\";\n\nconst file = await readJson(\"./foo.json\");\n\nconsole.log(file);\n```\n\nAlguns módulos ainda não estão [estáveis](https://deno.land/manual/runtime/stability) na v1.0.0, e para ter acesso a essas apis podemos utilizar a flag ```--unstable```.\n\n```shell\ndeno run --unstable  fs.js\n\nerror: Uncaught PermissionDenied: read access to \"/home/maicon/Documentos/projects/my-projects/starting-denojs/foo.json\", run again with the --allow-read flag\n```\n\nComo não explicitamos a flag para leitura de arquivos ele não acessa o arquivo solicitado no script.\n\n# Conclusão\n\nO deno ainda é novo, e provavelmente tem um caminho bem legal pela frente e não foi lançado para substituir o node.\n\nVimos algumas coisas bem legais nele como permissões explicitas e também suporte \"nativo\" ao typescript. Isso pode nos ajudar a enxergar para qual lado o javascript tente a caminhar daqui pra frente.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaiconwte%2Fstarting-deno","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaiconwte%2Fstarting-deno","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaiconwte%2Fstarting-deno/lists"}