Node.js - NPM
O Node Package Manager (NPM) fornece duas funcionalidades principais -
Repositórios online para pacotes / módulos node.js que podem ser pesquisados em search.nodejs.org
Utilitário de linha de comando para instalar pacotes Node.js, fazer gerenciamento de versões e gerenciamento de dependências de pacotes Node.js.
O NPM vem com instaláveis Node.js após a versão v0.6.3. Para verificar o mesmo, abra o console e digite o seguinte comando e veja o resultado -
$ npm --version
2.7.1
Se você estiver executando uma versão antiga do NPM, é muito fácil atualizá-lo para a versão mais recente. Basta usar o seguinte comando do root -
$ sudo npm install npm -g
/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
[email protected] /usr/lib/node_modules/npm
Instalando Módulos usando NPM
Existe uma sintaxe simples para instalar qualquer módulo Node.js -
$ npm install <Module Name>
Por exemplo, a seguir está o comando para instalar um famoso módulo de estrutura da web Node.js chamado express -
$ npm install express
Agora você pode usar este módulo em seu arquivo js da seguinte forma -
var express = require('express');
Instalação global x local
Por padrão, o NPM instala qualquer dependência no modo local. Aqui, o modo local se refere à instalação do pacote no diretório node_modules localizado na pasta onde o aplicativo Node está presente. Os pacotes implantados localmente são acessíveis por meio do método require (). Por exemplo, quando instalamos o módulo express, ele criou o diretório node_modules no diretório atual onde instalou o módulo express.
$ ls -l
total 0
drwxr-xr-x 3 root root 20 Mar 17 02:23 node_modules
Alternativamente, você pode usar npm ls comando para listar todos os módulos instalados localmente.
Os pacotes / dependências instalados globalmente são armazenados no diretório do sistema. Essas dependências podem ser usadas na função CLI (Command Line Interface) de qualquer node.js, mas não podem ser importadas usando require () no aplicativo Node diretamente. Agora vamos tentar instalar o módulo expresso usando a instalação global.
$ npm install express -g
Isso produzirá um resultado semelhante, mas o módulo será instalado globalmente. Aqui, a primeira linha mostra a versão do módulo e o local onde ele está sendo instalado.
[email protected] /usr/lib/node_modules/express
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
├── [email protected] ([email protected], [email protected], [email protected])
├── [email protected] ([email protected])
├── [email protected] ([email protected], [email protected])
└── [email protected] ([email protected], [email protected])
Você pode usar o seguinte comando para verificar todos os módulos instalados globalmente -
$ npm ls -g
Usando package.json
package.json está presente no diretório raiz de qualquer aplicativo / módulo do Node e é usado para definir as propriedades de um pacote. Vamos abrir o package.json do pacote expresso presente emnode_modules/express/
{
"name": "express",
"description": "Fast, unopinionated, minimalist web framework",
"version": "4.11.2",
"author": {
"name": "TJ Holowaychuk",
"email": "[email protected]"
},
"contributors": [{
"name": "Aaron Heckmann",
"email": "[email protected]"
},
{
"name": "Ciaran Jessup",
"email": "[email protected]"
},
{
"name": "Douglas Christopher Wilson",
"email": "[email protected]"
},
{
"name": "Guillermo Rauch",
"email": "[email protected]"
},
{
"name": "Jonathan Ong",
"email": "[email protected]"
},
{
"name": "Roman Shtylman",
"email": "[email protected]"
},
{
"name": "Young Jae Sim",
"email": "[email protected]"
} ],
"license": "MIT", "repository": {
"type": "git",
"url": "https://github.com/strongloop/express"
},
"homepage": "https://expressjs.com/", "keywords": [
"express",
"framework",
"sinatra",
"web",
"rest",
"restful",
"router",
"app",
"api"
],
"dependencies": {
"accepts": "~1.2.3",
"content-disposition": "0.5.0",
"cookie-signature": "1.0.5",
"debug": "~2.1.1",
"depd": "~1.0.0",
"escape-html": "1.0.1",
"etag": "~1.5.1",
"finalhandler": "0.3.3",
"fresh": "0.2.4",
"media-typer": "0.3.0",
"methods": "~1.1.1",
"on-finished": "~2.2.0",
"parseurl": "~1.3.0",
"path-to-regexp": "0.1.3",
"proxy-addr": "~1.0.6",
"qs": "2.3.3",
"range-parser": "~1.0.2",
"send": "0.11.1",
"serve-static": "~1.8.1",
"type-is": "~1.5.6",
"vary": "~1.0.0",
"cookie": "0.1.2",
"merge-descriptors": "0.0.2",
"utils-merge": "1.0.0"
},
"devDependencies": {
"after": "0.8.1",
"ejs": "2.1.4",
"istanbul": "0.3.5",
"marked": "0.3.3",
"mocha": "~2.1.0",
"should": "~4.6.2",
"supertest": "~0.15.0",
"hjs": "~0.0.6",
"body-parser": "~1.11.0",
"connect-redis": "~2.2.0",
"cookie-parser": "~1.3.3",
"express-session": "~1.10.2",
"jade": "~1.9.1",
"method-override": "~2.3.1",
"morgan": "~1.5.1",
"multiparty": "~4.1.1",
"vhost": "~3.0.0"
},
"engines": {
"node": ">= 0.10.0"
},
"files": [
"LICENSE",
"History.md",
"Readme.md",
"index.js",
"lib/"
],
"scripts": {
"test": "mocha --require test/support/env
--reporter spec --bail --check-leaks test/ test/acceptance/",
"test-cov": "istanbul cover node_modules/mocha/bin/_mocha
-- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
"test-tap": "mocha --require test/support/env
--reporter tap --check-leaks test/ test/acceptance/",
"test-travis": "istanbul cover node_modules/mocha/bin/_mocha
--report lcovonly -- --require test/support/env
--reporter spec --check-leaks test/ test/acceptance/"
},
"gitHead": "63ab25579bda70b4927a179b580a9c580b6c7ada",
"bugs": {
"url": "https://github.com/strongloop/express/issues"
},
"_id": "[email protected]",
"_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
"_from": "[email protected]*",
"_npmVersion": "1.4.28",
"_npmUser": {
"name": "dougwilson",
"email": "[email protected]"
},
"maintainers": [{
"name": "tjholowaychuk",
"email": "[email protected]"
},
{
"name": "jongleberry",
"email": "[email protected]"
},
{
"name": "shtylman",
"email": "[email protected]"
},
{
"name": "dougwilson",
"email": "[email protected]"
},
{
"name": "aredridel",
"email": "[email protected]"
},
{
"name": "strongloop",
"email": "[email protected]"
},
{
"name": "rfeng",
"email": "[email protected]"
}],
"dist": {
"shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
"tarball": "https://registry.npmjs.org/express/-/express-4.11.2.tgz"
},
"directories": {},
"_resolved": "https://registry.npmjs.org/express/-/express-4.11.2.tgz",
"readme": "ERROR: No README data found!"
}
Atributos de Package.json
name - nome do pacote
version - versão do pacote
description - descrição do pacote
homepage - página inicial do pacote
author - autor do pacote
contributors - nome dos contribuidores do pacote
dependencies- lista de dependências. O NPM instala automaticamente todas as dependências mencionadas aqui na pasta node_module do pacote.
repository - tipo de repositório e URL do pacote
main - ponto de entrada do pacote
keywords - palavras-chave
Desinstalando um Módulo
Use o seguinte comando para desinstalar um módulo Node.js.
$ npm uninstall express
Depois que o NPM desinstala o pacote, você pode verificá-lo examinando o conteúdo do diretório / node_modules / ou digitar o seguinte comando -
$ npm ls
Atualizando um Módulo
Atualize o package.json e altere a versão da dependência a ser atualizada e execute o seguinte comando.
$ npm update express
Pesquisar um Módulo
Pesquise um nome de pacote usando NPM.
$ npm search express
Crie um Módulo
A criação de um módulo requer que o package.json seja gerado. Vamos gerar o package.json usando o NPM, que gerará o esqueleto básico do package.json.
$ npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sane defaults.
See 'npm help json' for definitive documentation on these fields
and exactly what they do.
Use 'npm install <pkg> --save' afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
name: (webmaster)
Você precisará fornecer todas as informações necessárias sobre o seu módulo. Você pode obter ajuda do arquivo package.json mencionado acima para entender os significados das várias informações exigidas. Depois que o package.json for gerado, use o seguinte comando para se registrar no site do repositório NPM usando um endereço de e-mail válido.
$ npm adduser
Username: mcmohd
Password:
Email: (this IS public) [email protected]
É hora de publicar seu módulo -
$ npm publish
Se tudo estiver bem com o seu módulo, ele será publicado no repositório e poderá ser instalado usando o NPM como qualquer outro módulo Node.js.