Pensando fora do Browser

O NodeJS é um programa escrito em C++ e baseado na engine V8 cuja principal função é poder ler e interpretar códigos javascripts fora do browser.

A princípio, o NodeJS foi pensado para poder criar servidores web baseados em eventos javascripts. E isso ainda é perfeitamente possível. Mas o fato é que você pode instalar e utilizar o node sem nunca necessariamente criar ou rodar um servidor baseado nele. Um exemplo: há um módulo do nodejs chamado uglify. (Um módulo é um arquivo javascript que você instala através do npm. Veremos isso detalhadamente em instantes). Uma vez instalado o uglify, você ganha de presente um novo comando no seu terminal. Esse comando faz com que o NodeJS seja capaz de ler um arquivo js e minificá-lo, automaticamente. Lindo né?

Uma coisa que devemos ter em mente é que um módulo do node pode ser instalado globalmente (no sistema, podendo ser usado em qualquer projeto) ou localmente (apenas no projeto atual).

Instalando módulos no NodeJS

Assim que instalamos o node já temos o nosso primeiro módulo disponível para uso, que é o próprio node package management, ou seja, ganhamos um comando novo no terminal: npm. Há uma flag que mostra um texto de ajuda sobre determinado comando: -h. Então, digite no seu terminal: $ npm install -h

Esse comando irá mostrar o texto de ajuda do comando install.

Sempre que você tiver dúvida sobre algum comando, habitue-se a sempre ver o texto de ajuda antes de procurar no stackoverflow. É uma excelente maneira de evoluir seus conhecimentos sobre determinada ferramenta.

Voltando: repare que no começo da ajuda há a seguinte linha: npm install <pkg>, onde <pkg> é o pacote a ser instalado.

Queremos instalar em nosso sistema o uglify, portanto, digite no terminal: $ npm install uglify-js -g

a flag -g informa que você está instalando o pacote globalmente no seu sistema.

Você deve estar se perguntando de onde o npm baixou os arquivos necessários para a instalação. A resposta: https://www.npmjs.com/package/uglify-js. O site npmjs.com é um repositório de pacotes desenvolvidos pela comunidade prontos para uso. Se o pacote estiver neste repositório, basta digitar seu nome logo após o comando install que o npm já sabe o que fazer.

Se a instalação ocorreu com sucesso, você deverá ver no terminal o local onde o módulo foi instalado (lembre-se que o instalamos globalmente no sistema com a flag -g) e as dependências necessárias para este módulo funcionar.

Agora que temos um comando novo na linha de comando, vamos experimentar o seguinte comando: $ uglifyjs -h

Eu confesso que a ajuda do uglify é um pouco extensa, mas não se preocupe, por hora, vamos simplesmente ver o uglify em ação.

A ideia é minificarmos o nosso arquivo app.js. Mas para isso, vamos editá-lo um pouco, como a seguir:

    var body = document.body;
    var cor = 'red';

    var mudaCor = function(alvo, cor){
        alvo.style.color = cor;
    }

    mudaCor(body, cor);

Tudo deve continuar funcionando, entretanto, vamos minificar esse arquivo. Para isso, tenha certeza de que está na pasta PrimeirosPassosWorflow e digite no terminal:

$ uglifyjs js/app.js --output js/app.min.js

Se tudo correu bem, um novo arquivo foi criado. O NodeJS leu o seu arquivo app.js e deu saída (--output) em outro arquivo, mas desta vez minificado. Abra-o no seu editor e veja o que aconteceu. Podemos ver que a minificação não foi lá essas coisas. Vamos corrigir isso. Digite no seu terminal:

$ uglifyjs js/app.js --output js/app.min.js --mangle

A flag --mangle irá analizar o seu arquivo e irá substituir, onde possível, alguns nomes de variáveis para deixar o arquivo mais enxuto, reduzindo assim alguns kbytes de transferência de dados.

Se você olhar o arquivo minificado, verá que os nomes dos parâmetros da função mudaCor foram alterados para um caracter apenas. Bem melhor, não? Há outras opções disponíveis no uglify. E há também uma infinidade de outros pacotes disponíveis no npmjs.org. Mas o mais importante aqui é perceber que usamos o NodeJS e o npm para instalar um pacote globalmente e utilizamos esse pacote sem necessariamente termos configurado um servidor.

Precisamos entender agora a diferença entre instalar um pacote global (com a flag -g) e um pacote local em nosso projeto.

results matching ""

    No results matching ""