Primeiro programa em node.js
Antes de fazermos o primeiro programa para node.js, vamos criar uma pasta no disco para os programas. Podemos criar uma pasta chama nodejs.
De seguida, abrimos o terminal e mudamos para a pasta nodejs:

Vamos então criar o ficheiro de javascript ola.js com o editor Visual Studio Code.
Na pasta nodejs fazemoscode ola.js
Este comando abre o Visual Studio Code e cria o ficheiro ola.js.
No ficheiro ola.js escrevemos o seguinte código:
function ola(nome) {
console.log("Olá " + nome);
}
ola("Maria");
Guardamos o ficheiro e para executá-lo vamos ao terminal e escrevemos:
node ola.ja;
A instrução node ola.js chama o runtime do node.js e passa-lhe o ficheiro de javascript a ser executado.
Como podemos ver, ele mostra a mensagem Olá Luis na consola.
O ficheiro package.json
O ficheiro package.json é um ficheiro indispensável em qualquer projecto de node.js. É um ficheiro com código json constituído por um objecto com várias propriedades.
Essas propriedades contém informação importante, ou seja, metadados, sobre o projecto.
O ficheiro package.json lista os módulos dos quais o seu projeto depende. Especifica as versões nos módulos instalados. Torna a sua compilação reproduzível e, portanto, mais fácil de compartilhar com outros programadores.
O ficheiro package.json deve residir na pasta de raiz do projeto nodejs.
Criamos o ficheiro package.json escrevendo a instrução npm init, no terminal, na pasta do projeto.
Ao executarmos a instrução acima, é pedido ao programador que introduza informação sobre o projeto tal como: nome, versão, descrição, autor, etc.
O ficheiro criado tem uma estrutura básica que é a seguinte:
{
"name": "mysql-app",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Estrutura do ficheiro package.json
O ficheiro package.json é composto por várias propriedades sendo duas delas obrigatórias: name e version.
name é o nome da aplicação.
version é a versão da aplicação.
Para além dessas propriedades existem várias outras opcionais.
De notar, a directiva main que especifica o script de javascript que é o ponto de entrada da
aplicação.
Na propriedade scripts podemos especificar os scripts de teste da aplicação.
Quando instalamos um package ou módulo, como por exemplo o package mysql, o ficheiro package.json é atualizado na propriedade dependencies passando a referenciar o módulo instalado:
{
"name": "mysql-app",
"version": "1.0.0",
"description": "",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"mysql": "^2.17.1"
}
}
A instalação do módulo mysql está refletida na propriedade dependencies onde está o nome do módulo e a sua versão.
O ficheiro package-lock.json
A partir da versão 5.X.X do npm, sempre que se instala um package é criado o ficheiro
package-lock.json .
Normalmente, o ficheiro package-lock.json é criado com o comando e que descreve a
árvore de dependências dos packages instalados.
Exemplo de um ficheiro package-lock.json, após a instalação do package mysql:
{
"name": "mysql-app",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"bignumber.js": {
"version": "7.2.1",
"resolved": "https://registry.npmjs.org/bignumber.js/-
/bignumber.js-7.2.1.tgz",
"integrity": "sha512-
S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3
NuaaygCRrEpqox4uDOrbdQ=="
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-
/core-util-is-1.0.2.tgz",
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-
/inherits-2.0.4.tgz",
"integrity": "sha512-
k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zG
SoIFeMpXKxa4dYeZIQqewQ=="
},
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-
1.0.0.tgz",
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"mysql": {
"version": "2.17.1",
"resolved": "https://registry.npmjs.org/mysql/-/mysql-
2.17.1.tgz",
"integrity": "sha512-
7vMqHQ673SAk5C8fOzTG2LpPcf3bNt0oL3sFpxPEEFp1mdlDcrLK0On7z8ZYKaaH
rHwNcQ/MTUz7/oobZ2OyyA==",
"requires": {
"bignumber.js": "7.2.1",
"readable-stream": "2.3.6",
"safe-buffer": "5.1.2",
"sqlstring": "2.3.1"
}
},
"process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-
args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-
3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxu
bEF6Wn2ypscTKiKJFFn1ag=="
},
"readable-stream": {
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/readable-stream/-
/readable-stream-2.3.6.tgz",
"integrity": "sha512-
tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9d
UrAC39ITejlZWhVIwawkKw==",
"requires": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
"isarray": "~1.0.0",
"process-nextick-args": "~2.0.0",
"safe-buffer": "~5.1.1",
"string_decoder": "~1.1.1",
"util-deprecate": "~1.0.1"
}
},
"safe-buffer": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-
/safe-buffer-5.1.2.tgz",
"integrity": "sha512-
Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF
8LOIrt8ud/wPtojys4G6+g=="
},
"sqlstring": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/sqlstring/-
/sqlstring-2.3.1.tgz",
"integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
},
"string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-
/string_decoder-1.1.1.tgz",
"integrity": "sha512-
n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8p
JAveEEdnkHyPyTP/mzRfwg==",
"requires": {
"safe-buffer": "~5.1.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-
/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
}
}
}
