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.