Node.js npm 使用介紹

整理自菜鳥教程javascript

1、npm 簡介

npm 是隨同NodeJS一塊兒安裝的包管理工具,能解決NodeJS代碼部署上的不少問題,常見的使用場景有如下幾種:css

  • 容許用戶從NPM服務器下載別人編寫的第三方包到本地使用。
  • 容許用戶從NPM服務器下載並安裝別人編寫的命令行程序到本地使用。
  • 容許用戶將本身編寫的包或命令行程序上傳到NPM服務器供別人使用。

因爲新版的nodejs已經集成了npm,因此以前npm也一併安裝好了。一樣能夠經過輸入 「npm -v」 來測試是否成功安裝。命令以下,出現版本提示表示安裝成功:java

C:\Users\peipei3514>npm -v
5.5.1

若是你安裝的是舊版本的 npm,能夠很容易得經過 npm 命令來升級,命令以下(管理員權限):node

C:\WINDOWS\system32>npm install npm -g
C:\Program Files\nodejs\node_gobal\npm -> C:\Program Files\nodejs\node_gobal\node_modules\npm\bin\npm-cli.js
C:\Program Files\nodejs\node_gobal\npx -> C:\Program Files\nodejs\node_gobal\node_modules\npm\bin\npx-cli.js
+ npm@5.6.0
added 476 packages in 17.895s

2、使用 npm 命令安裝模塊

npm 安裝 Node.js 模塊語法格式以下:git

npm install <Module Name>

如下實例,咱們使用 npm 命令安裝經常使用的 Node.js web框架模塊 express:github

C:\WINDOWS\system32>npm install express -g
+ express@4.16.2
added 48 packages in 11.272s

安裝好以後,express 包就放在了工程目錄下的 node_modules 目錄中,所以在代碼中只須要經過 require(‘express’) 的方式就好,無需指定第三方包路徑。web

var express = require('express');

3、全局安裝與本地安裝

npm 的包安裝分爲本地安裝(local)、全局安裝(global)兩種,從敲的命令行來看,差異只是有沒有-g而已,好比redis

npm install express      # 本地安裝
npm install express -g   # 全局安裝

若是出現如下錯誤:sql

npm err! Error: connect ECONNREFUSED 127.0.0.1:8087

解決辦法爲:express

npm config set proxy null
本地安裝
  1. 將安裝包放在 ./node_modules 下(運行 npm 命令時所在的目錄),若是沒有 node_modules 目錄,會在當前執行 npm 命令的目錄下生成 node_modules 目錄。
  2. 能夠經過 require() 來引入本地安裝的包。
全局安裝
  1. 將安裝包放在 /usr/local 下或者你 node 的安裝目錄。
  2. 能夠直接在命令行裏使用。

若是你但願具有二者功能,則須要在兩個地方安裝它或使用 npm link。

接下來咱們使用全局方式安裝 express

C:\WINDOWS\system32>npm install express -g
+ express@4.16.2
added 48 packages in 11.272s
查看安裝信息

你可使用如下命令來查看全部全局安裝的模塊:

C:\WINDOWS\system32>npm list -g
C:\Program Files\nodejs\node_gobal
`-- express@4.16.2
  +-- accepts@1.3.4
  | +-- mime-types@2.1.17
  | | `-- mime-db@1.30.0
  | `-- negotiator@0.6.1
  +-- array-flatten@1.1.1
  +-- body-parser@1.18.2
  | +-- bytes@3.0.0
  | +-- content-type@1.0.4 deduped
  | +-- debug@2.6.9 deduped

若是要查看某個模塊的版本號,可使用命令以下:

C:\WINDOWS\system32>npm list express -g
C:\Program Files\nodejs\node_gobal
`-- express@4.16.2

4、使用 package.json

package.json 位於模塊的目錄下,用於定義包的屬性。接下來讓咱們來看下 express 包的 package.json 文件,位於 node_modules/express/package.json 內容:

{
  "_from": "express",
  ...
  "_phantomChildren": {},
  "_requested": {
    "type": "tag",
    "registry": true,
    ...
    "fetchSpec": "latest"
  },
  "_requiredBy": [
    "#USER"
  ],
  "_resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz",
  "_shasum": "e35c6dfe2d64b7dca0a5cd4f21781be3299e076c",
  "_spec": "express",
  "_where": "C:\\WINDOWS\\system32",
  "author": {
    "name": "TJ Holowaychuk",
    "email": "tj@vision-media.ca"
  },
  "bugs": {
    "url": "https://github.com/expressjs/express/issues"
  },
  "bundleDependencies": false,
  "contributors": [
    {
      "name": "Aaron Heckmann",
      "email": "aaron.heckmann+github@gmail.com"
    }
  ],
  "dependencies": {
    "accepts": "~1.3.4",
    "array-flatten": "1.1.1",
    ...
    "type-is": "~1.6.15",
    "utils-merge": "1.0.1",
    "vary": "~1.1.2"
  },
  "deprecated": false,
  "description": "Fast, unopinionated, minimalist web framework",
  "devDependencies": {
    "after": "0.8.2",
    "connect-redis": "~2.4.1",
    ...
    "vhost": "~3.0.2"
  },
  "engines": {
    "node": ">= 0.10.0"
  },
  "files": [
    "LICENSE",
    "History.md",
    "Readme.md",
    "index.js",
    "lib/"
  ],
  "homepage": "http://expressjs.com/",
  "keywords": [
    "express",
    ...
    "app",
    "api"
  ],
  "license": "MIT",
  "name": "express",
  "repository": {
    "type": "git",
    "url": "git+https://github.com/expressjs/express.git"
  },
  "scripts": {
    "lint": "eslint .",
    ...
    "test-tap": "mocha --require test/support/env --reporter tap --check-leaks --no-exit test/ test/acceptance/"
  },
  "version": "4.16.2"
}

Package.json 屬性說明:

  • name - 包名。
  • version - 包的版本號。
  • description - 包的描述。
  • homepage - 包的官網 url 。
  • author - 包的做者姓名。
  • contributors - 包的其餘貢獻者姓名。
  • dependencies - 依賴包列表。若是依賴包沒有安裝,npm 會自動將依賴包安裝在 node_module 目錄下。
  • repository - 包代碼存放的地方的類型,能夠是 git 或 svn,git 可在 Github 上。
  • main - main 字段指定了程序的主入口文件,require(‘moduleName’) 就會加載這個文件。這個字段的默認值是模塊根目錄下面的 index.js。
  • keywords - 關鍵字。

5、卸載模塊

咱們可使用如下命令來卸載 Node.js 模塊。

npm uninstall express

卸載後,你能夠到 /node_modules/ 目錄下查看包是否還存在,或者使用如下命令查看:

npm ls

6、更新模塊

咱們可使用如下命令更新模塊:

npm update express

7、搜索模塊

使用如下來搜索模塊:

npm search express

8、NPM 經常使用命令

  • NPM提供了不少命令,例如install和publish,使用npm help可查看全部命令。
  • 使用npm help <command>可查看某條命令的詳細幫助,例如npm help install。
  • 在package.json所在目錄下使用npm install . -g可先在本地安裝當前命令行程序,可用於發佈前的本地測試。
  • 使用npm update <package>能夠把當前目錄下node_modules子目錄裏邊的對應模塊更新至最新版本。
  • 使用npm update <package> -g能夠把全局安裝的對應命令行程序更新至最新版。
  • 使用npm cache clear能夠清空NPM本地緩存,用於對付使用相同版本號發佈新版本代碼的人。
  • 使用npm unpublish <package>@<version>能夠撤銷發佈本身發佈過的某個版本代碼。

9、使用淘寶 NPM 鏡像

你們都知道國內直接使用 npm 的官方鏡像是很是慢的,這裏推薦使用淘寶 NPM 鏡像。

淘寶 NPM 鏡像是一個完整 npmjs.org 鏡像,你能夠用此代替官方版本(只讀),同步頻率目前爲 10分鐘 一次以保證儘可能與官方服務同步。

你可使用淘寶定製的 cnpm (gzip 壓縮支持) 命令行工具代替默認的 npm:

npm install -g cnpm --registry=https://registry.npm.taobao.org

這樣就可使用 cnpm 命令來安裝模塊了:

cnpm install [name]