Deno's Module System 🦕

Por Felipe Barbosa, 11/01/2023

deno

Uma rápida introdução

Deno é a mais nova criança do bairro. Concebido com o propósito de ser uma plataforma segura, eficiente e universal do JavaScript/TypeScript , o Deno veio para suplantar várias limitações existentes no ecossistema Node que, supostamente, seriam incorrigíveis. Na verdade, o Deno é um projeto do mesmo criador do Node, o Ryan Dahl. Segundo a definição do site oficial:

Deno (/ˈdiːnoʊ/, pronounced dee-no) is a JavaScript, TypeScript, and WebAssembly runtime with secure defaults and a great developer experience. It's built on V8, Rust, and Tokio.

Construí meu último projeto (meu blog pessoal) em cima dele e, posso garantir: o hype é real.

Hoje eu vou falar um pouco sobre como funciona o module system na plataforma.

Deno’s Module System

ESM

Ao contrário do Node, Deno usa ECMAScript Modules por padrão, em detrimento do CommonJS, adotado antes que a linguagem tivesse um sistema de módulos definido.

Isso é maravilhoso, porque a comunidade ganha uma maneira universal de lidar com imports na linguagem (browser e server).

Ausência de gerenciador de pacote centralizado

O Deno não se baseia no npm por padrão para gerenciar módulos. Ao invés disso, as dependências de um projeto são todas estabelecidas nos imports pelo próprio desenvolvedor em forma de URLs.

URLs

Para usar uma biblioteca externa, você simplesmente importa a URL da biblioteca.

import {
  add,
  multiply,
} from "https://x.nest.land/ramda@0.27.0/source/index.js";

function totalCost(outbound: number, inbound: number, tax: number): number {
  return multiply(add(outbound, inbound), tax);
}

console.log(totalCost(19, 31, 1.2));
console.log(totalCost(45, 27, 1.15));

Isso significa que você pode, por exemplo, distribuir pacotes e bibliotecas hospedando-as no próprio github!

Como gerenciar?

Você pode estar se perguntando como se gerencia as dependências sem um package.json. Em primeiro lugar, as versões específicas das dependências podem ser especificadas na própria URL. Em segundo lugar, a maneira recomendada de lidar com isso é criando um arquivo chamado deps.ts central onde você importa todas as dependências do projetos e as re-exporta para serem utilizadas em outras partes do código. Na prática é quase equivalente a ter um package.json especificando as dependências e suas versões.

Conclusão

Vale muito a pena experimentar o Deno no seu próximo projeto. Acho algo realmente promissor e vejo nele o futuro do server-side (e universal) JavaScript. A documentação é maravilhosa, confere lá:

deno.land

Gostando até aqui? ✍️

Receba atualizações de conteúdo diretamente na sua caixa de entrada!