Módulos em JavaScript
Este artigo explica módulos em JavaScript.
YouTube Video
Módulos em JavaScript
Módulos em JavaScript são uma maneira de organizar o código e dividi-lo em componentes reutilizáveis. Ao usar módulos, a legibilidade e a manutenção do código são melhoradas, e a mesma funcionalidade pode ser reutilizada em outros projetos. Aqui explicamos vários sistemas de módulos, desde o conceito de módulos até exemplos específicos de uso.
O Conceito de Módulos em JavaScript
Originalmente, o JavaScript não possuía um sistema modular. No entanto, à medida que as aplicações se tornaram maiores, a modularização tornou-se importante para dividir o código em unidades menores e reutilizáveis. Um módulo é um trecho de código com uma função específica que pode ser gerenciado de forma independente de outro código, permitindo dividi-lo em vários arquivos.
Principais Tipos de Módulos
Existem vários sistemas de módulos no JavaScript. Os mais comuns são ES Modules (ESM) e CommonJS.
-
ES Modules é um sistema de módulos introduzido no ECMAScript 2015 (ES6), que define módulos usando as palavras-chave
import
eexport
. Este sistema é amplamente utilizado tanto no lado do cliente (navegadores) quanto no lado do servidor (Node.js). -
CommonJS é um sistema de módulos usado principalmente no Node.js. Os módulos são definidos usando
require
emodule.exports
para importar e exportar arquivos.
Detalhes sobre ES Modules (ESM)
ES Modules é o sistema de módulo padrão no JavaScript, permitindo uma troca fácil de funcionalidades entre módulos. Nos navegadores e no Node.js, este sistema é usado para definir e importar módulos.
export
e import
export
é uma palavra-chave usada para expor funcionalidades de um módulo para fora. import
é usado para incorporar funcionalidades definidas em outros módulos.
Exemplo: Exportação de Módulo
Módulos podem ser exportados em ES Modules
da seguinte maneira.
1// math.mjs
2export function add(a, b) {
3 return a + b;
4}
5export function subtract(a, b) {
6 return a - b;
7}
Neste módulo math.mjs
, as funções add
e subtract
são exportadas. Essas funções podem ser importadas de outros módulos.
Aqui, .mjs
é uma extensão de arquivo que indica explicitamente um arquivo JavaScript no formato ES Modules. No Node.js, a extensão do arquivo determina se é CommonJS
ou ES Modules
. No entanto, se type: "module"
estiver especificado no package.json
, arquivos com a extensão .js
são tratados como ES Modules
por padrão.
Exemplo: Importação de Módulo
Módulos podem ser importados em ES Modules
da seguinte maneira.
1// main.mjs
2import { add, subtract } from './math.mjs';
3
4console.log(add(3, 5)); // 8
5console.log(subtract(10, 7)); // 3
Dessa forma, usando import
, você pode facilmente utilizar funções definidas em outros arquivos.
Exportação Padrão e Exportação Nomeada
Existem dois métodos de exportação para módulos. Um é a exportação nomeada, e o outro é a exportação padrão.
- Exportações nomeadas são usadas ao exportar várias funções ou variáveis de um módulo. Você pode realizar várias exportações, e ao importar, recebê-las com nomes especificados.
1// utils.mjs
2export function sum(a, b) {
3 return a + b;
4}
5export function multiply(a, b) {
6 return a * b;
7}
1// main.mjs
2import { sum, multiply } from './utils.mjs';
3
4console.log(sum(4, 6)); // 10
5console.log(multiply(3, 5)); // 15
- Exportação padrão é usada ao exportar uma única função ou classe de um módulo. Durante a importação, pode ser recebido com qualquer nome.
1// greet.mjs
2export default function greet() {
3 return "Hello, World!";
4}
1// main.mjs
2import greet from './greet.mjs';
3
4console.log(greet()); // "Hello, World!"
Apenas uma exportação padrão é possível, mas exportações nomeadas podem exportar vários elementos simultaneamente.
Exemplo de uso no lado do cliente (navegador).
Exemplo: Exportação de Módulo
Módulos podem ser exportados em ES Modules
da seguinte maneira.
1// utils.js
2export function sum(a, b) {
3 return a + b;
4}
5export function multiply(a, b) {
6 return a * b;
7}
Neste módulo utils.js
, as funções sum
e multiply
são exportadas.
Exemplo: Importação de Módulo
Módulos podem ser importados no lado do cliente da seguinte maneira.
1<!DOCTYPE html>
2<html lang="ja">
3<head>
4 <meta charset="UTF-8">
5 <title>ES Modules Sample in HTML</title>
6</head>
7<body>
8 <h1>ES Modules Sample</h1>
9 <div id="result"></div>
10
11 <script type="module">
12 import { sum, multiply } from './utils.js';
13
14 const result = `
15 <p>sum(3, 5) = ${sum(3, 5)}</p>
16 <p>multiply(10, 7) = ${multiply(10, 7)}</p>
17 `;
18
19 document.getElementById('result').innerHTML = result;
20 console.log(sum(3, 5)); // 8
21 console.log(multiply(10, 7)); // 70
22 </script>
23</body>
24</html>
- Definindo o atributo
type
da tag<script>
comomodule
, a sintaxe de módulos ES comoimport
eexport
pode ser usada dentro do HTML. - A instrução
import
carrega o arquivo externoutils.js
e exibe o resultado.
Detalhes do CommonJS
CommonJS é um sistema de módulos principalmente usado no Node.js. Os módulos são exportados e importados usando module.exports
e require
.
require
e module.exports
No CommonJS, module.exports
é usado para exportar módulos. Além disso, require
é usado para utilizar módulos de outros arquivos.
Exemplo: Exportação de Módulo
Módulos podem ser exportados em CommonJS
da seguinte maneira.
1// math.js
2module.exports = {
3 add: function(a, b) {
4 return a + b;
5 },
6 subtract: function(a, b) {
7 return a - b;
8 }
9};
Exemplo: Importação de Módulo
Módulos podem ser importados em CommonJS
da seguinte maneira.
1// main.js
2const math = require('./math.js');
3
4console.log(math.add(4, 7)); // 11
5console.log(math.subtract(9, 2)); // 7
No Node.js, CommonJS é usado como o sistema de módulos padrão, mas Módulos ES também são suportados.
Importação Dinâmica
Em JavaScript, os módulos podem ser importados dinamicamente usando import()
. Esse método utiliza processamento assíncrono para carregar módulos conforme necessário.
Importações dinâmicas podem ser feitas da seguinte maneira.
1async function loadModule() {
2 const math = await import('./math.js');
3 console.log(math.add(5, 3)); // 8
4}
5
6loadModule();
A importação dinâmica é uma forma de melhorar o desempenho da aplicação. Como você pode carregar módulos conforme necessário ao invés de carregar tudo no carregamento inicial, isso melhora a velocidade de exibição da página.
Vantagens dos Módulos
-
Reutilização de Código
- O código modularizado pode ser reutilizado em outros projetos. Ao criar módulos com funcionalidades comuns e utilizá-los em várias aplicações, a eficiência do desenvolvimento é significativamente melhorada.
-
Manutenção Aprimorada
- Ao dividir o código em módulos, é mais fácil modificar funcionalidades ou partes específicas. Gerenciar o código em pequenas unidades facilita encontrar e corrigir erros.
-
Evitar Colisões de Namespace
- Definir muitas variáveis e funções no escopo global pode causar colisões de nomes, mas a modularização evita isso e ajuda a manter uma base de código mais limpa.
-
Gerenciamento de Dependências
- O uso de módulos permite gerenciar explicitamente as dependências de uma aplicação. Fica claro qual módulo depende de outros, tornando a estrutura do código mais fácil de entender.
Resumo
O sistema de módulos do JavaScript é uma ferramenta poderosa para organizar o código e dividi-lo em componentes reutilizáveis. Ao entender as diferenças entre os Módulos ES e CommonJS e escolher o sistema de módulos apropriado com base no projeto, você pode melhorar a legibilidade e a manutenção do código. Além disso, ao utilizar importações dinâmicas, você pode otimizar o desempenho da aplicação.
Vamos aproveitar o sistema de módulos para criar aplicações JavaScript mais escaláveis e eficientes.
Você pode acompanhar o artigo acima usando o Visual Studio Code em nosso canal do YouTube. Por favor, confira também o canal do YouTube.