Fork me on GitHub

Alan Hoffmeister

Paul Laros

Criando executáveis com Node.js

Quem nunca teve a vontade de criar um executável para distribuir em outras máquinas e clientes, usando o Node.js? Hoje vamos falar um pouco sobre como criar um arquivo único contendo o seu código junto com o Node.js.

Dica simples e rápida para quem deseja criar aquele arquivo.exe ou executar um ./hello-world no terminar sem precisar instalar o Node.js.

A distribuição do Node.js já vem pré configurada para ser distribuída juntamente com arquivos de terceiros, assim você pode integrar o seu script juntamente com o build do Node.js.

Instruções para linux

O primeiro passo é instalar as dependências e baixar o source code do Node.js para que possamos compilá-lo.

sudo apt-get install build-essential
curl -O http://nodejs.org/dist/v0.10.35/node-v0.10.35.tar.gz
tar -zxvf node-v0.10.35.tar.gz
cd node-v0.10.35

Feito isso, precisamos criar um arquivo chamado _third_party_main.js e adicionar este arquivo ao node.gyp, depois disto é só compilar.

# Criamos o arquivo necessário
echo 'console.log("Hello world!");' >> lib/_third_party_main.js

# Depois acrescentamos este arquivo nas dependências da build
sed -i "s/lib\/zlib.js',/lib\/zlib.js',\n'lib\/_third_party_main.js'/" node.gyp

# Agora é só compilar o Node.js!
./configure
make

Após a compilação seu binário estará localizado na pasta ./out/Release e você já pode rodar ele.

cd ./out/Release
./node

Agora é só enviar este executável para os seus amigos, o seu programa rodará sem precisar instalar o Node.js.

Instruções para Windows

Se alguém souber o processo de compilação para Windows, por favor forke esta postagem e adicione aqui.

Bônus: reduzindo o tamanho com o UPX

O UPX é um packer para executáveis, reduzindo o tamanho dos mesmo, podemos utilizar ele para reduzir o tamanho do executável gerado.

sudo apt-get install upx
cd ./out/Release
cp node node_compressed
upx node_compressed

Podemos ver que o resultado ficou muito bom, nosso executável passou de 12Mb para apenas 4Mb, e continua funcionando.

➜  Release ls -lah
total 43M
-rwxrwxr-x  1 alan alan  12M Jan 12 15:31 node*
-rwxrwxr-x  1 alan alan 4,1M Jan 12 15:36 node_compressed*

Primeira conferência de Node.js da América Latina!

Durante os dias 4 e 5 de julho acontecerá a primeira conferência de Node.js da América Latina! Quer conhecer essa plataforma, aprender um pouco mais ou até aprimorar seus conhecimentos? Venha para São Paulo e participe desta edição história da NodeConf.