npm使用詳解

npmNode.js 官方提供的包管理工具,它已經(jīng)成了 Node.js 包的標準發(fā)布平臺,用于 Node.js 包的發(fā)布、傳播、依賴控制。npm 提供了命令行工具,使你可以方便地下載、安裝、升級、刪除包,也可以讓你作為開發(fā)者發(fā)布并維護包。

npm 是隨同 Node.js 一起安裝的包管理工具,能解決 Node.js 代碼部署上的很多問題,常見的場景有以下幾種:

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

安裝

  1. 新版的nodejs已經(jīng)集成了npm,測試版本:
$npm -v
6.9.0
  1. 升級
$sudo npm install npm -g
  1. windows 環(huán)境
npm install npm -g
  1. 查看npm擁有的全部命令
$ npm --help
$ npm help
查看某一個npm命令的詳細用法
$ npm <command> --help
$ npm help <command>

使用

  1. 包管理
npm install <package_name>

例如安裝express

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

指定一個版本:

$npm install express@4.0.1
  • 查看模塊的當前版本號
 npm view 模塊名 version

需要注意的是查看到的模塊版本是該模塊再遠程倉庫的版本號,并不是當前項目中所依賴的版本號。

  • 查看當前項目中應用的某個模塊的版本號的命令為
 npm list 模塊名 version
  • 查看模塊的歷史版本和當前版本
 npm view 模塊名 versions
  • 查看一個模塊的所有信息
 npm view 模塊名

本地安裝的話,包會安裝當前目錄node_modules文件夾下
在全局模式下面,NPM會把包安裝到/usr/local/lib/node_module

常見錯誤:

npm err! Error: connect ECONNREFUSED 127.0.0.1:8087
運行 npm config set proxy null
  1. 查看全局安裝
$npm list -g --depth 0
  1. 設置環(huán)境變量
    下面命令等于為 npm init 設置了默認值,以后執(zhí)行 npm init 的時候,package.json 的作者姓名、郵件、主頁、許可證字段就會自動寫入預設的值。這些信息會存放在用戶主目錄的 ~/.npmrc文件,使得用戶不用每個項目都輸入。如果某個項目有不同的設置,可以針對該項目運行npm config
$ npm set init-author-name 'Your name'
$ npm set init-author-email 'Your email'
$ npm set init-author-url 'http://yourdomain.com'
$ npm set init-license 'MIT'
  1. npm常用命令
  • npm init 會引導你創(chuàng)建一個package.json文件,包括名稱、版本、作者這些信息等
  • npm install <name> 安裝nodejs的依賴包
  • npm install <name> -g 將包安裝到全局環(huán)境中
  • npm install <name> --save 安裝的同時,將信息寫入package.json中。項目路徑中如果有package.json文件時,直接使用npm install方法就可以根據(jù)dependencies配置安裝所有的依賴包
  • npm remove <name> 移除
  • npm update <name> 更新
  • npm ls 列出當前安裝的了所有包
  • npm root 查看當前包的安裝路徑
  • npm root -g 查看全局的包的安裝路徑
  • npm info 命令可以查看每個模塊的具體信息。
  • npm prune 清除未被使用到的模塊

5.使用 package.json

通常我們使用npm init命令來創(chuàng)建一個npm程序時,會自動生成一個package.json文件。package.json文件會描述這個NPM包的所有相關信息,包括作者、簡介、包依賴、構建等信息,格式是嚴格的JSON格式。

  • 命令行方式創(chuàng)建package.json
$ npm init //生成一個package.json

然后在當前目錄生成一個基本的package.json文件。所有問題之中,只有項目名稱(name)和項目版本(version)是必填的,其他都是選填的,一路下一步。

  • 查看生成的package
$cat package.json
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC"
  • 屬性介紹

    • name
      name和version是package.json中最重要的兩個字段,也是發(fā)布到NPM平臺上的唯一標識,如果沒有正確設置這兩個字段,包就不能發(fā)布和被下載。

    • version
      包的版本號。如"1.0.0"。
      在node.js中的package.json配置文件中,我們需要配置版本號,比如0.1.2
      第一位數(shù)字:主版本號
      第二位數(shù)字:子版本號
      第三位數(shù)字:補丁版本號

    • description
      包的描述信息,將會在npm search的返回結果中顯示,以幫助用戶選擇合適的包。

    • keywords
      包的關鍵詞信息,是一個字符串數(shù)組,同上也將顯示在npm search的結果中。

    • homepage
      包的主頁地址。

    • bugs
      包的bug跟蹤主頁地址。

    • license
      包的開源協(xié)議名稱。

    • author
      包的作者。

    • contributors, maintainers
      包的貢獻者,是一個數(shù)組。

    • files(較少用)
      包所包含的所有文件,可以取值為文件夾。通常我們還是用.npmignore來去除不想包含到包里的文件。

    • main
      包的入口文件。

    • bin(較少用)
      如果你的包里包含可執(zhí)行文件,通過設置這個字段可以將它們包含到系統(tǒng)的PATH中,這樣直接就可以運行,很方便。

  • man(較少用)
    為系統(tǒng)的man命令提供幫助文檔。幫助文件的文件名必須以數(shù)字結尾,如果是壓縮的,需要以.gz結尾。
    "man": ["./man/foo.1", "./man/bar.1", "./man/foo.2" ]
    directories(較少用)
    CommonJS包所要求的目錄結構信息,展示項目的目錄結構信息。字段可以是:lib, bin, man, doc, example。值都是字符串。

    • repository
      包的倉庫地址。
      "repository": {
      "type": "git",
      "url": "git+https://github.com/rainnaZR/es6-react.git"
      },

    • scripts
      通過設置這個可以使NPM調用一些命令腳本,封裝一些功能。
      "scripts": {"start": "babel-node src/pages/index.js",
      "build": "webpack --config config/webpack.config.js",
      "watch": "webpack-dev-server --config config/webpack.config.js --hot --inline --progress"
      }

    • config
      添加一些設置,可以供scripts讀取用,同時這里的值也會被添加到系統(tǒng)的環(huán)境變量中。
      "config": {
      "port": "8080"
      }
      npm start的時候會讀取到npm_package_config_port環(huán)境變量。

    • dependencies
      指定依賴的其它包,這些依賴是指包發(fā)布后正常執(zhí)行時所需要的,也就是線上需要的包。使用下面的命令來安裝:
      npm install --save packageName
      如果是開發(fā)中依賴的包,可以在devDependencies設置。

    • devDependencies
      這些依賴只有在開發(fā)時候才需要。使用下面的命令來安裝:
      npm install --save-dev packageName

    • peerDependencies
      相關的依賴,如果你的包是插件,而用戶在使用你的包時候,通常也會需要這些依賴(插件),那么可以將依賴列到這里。

    • bundledDependencies
      綁定的依賴包,發(fā)布的時候這些綁定包也會被一同發(fā)布。

    • optionalDependencies(較少用)
      即使這些依賴沒有,也可以正常安裝使用。

    • engines(較少用)
      指定包運行的環(huán)境。
      "engines": {
      "node": ">=0.10.3 < 0.12",
      "npm": "~1.0.20"
      }

    • os(較少用)
      指定你的包可以在哪些系統(tǒng)平臺下運行。
      "os": [ "darwin", "linux", "!win32" ]
      cpu(較少用)
      可以指定包運行的cpu架構。

    • private
      設為true這個包將不會發(fā)布到NPM平臺下。

    • publishConfig(較少用)
      這個字段用于設置發(fā)布時候的一些設定。尤其方便你希望發(fā)布前設定指定的tag或registry。
      當你有了一個完整的 package.json 文件的時候,就可以讓人一眼看出來,這個模塊的基本信息,和這個模塊所需要依賴的包。我們可以通過 npm install就可以很方便的下載好這個模塊所需要的包。
      npm install 默認會安裝 dependencies 字段和 devDependencies 字段中的所有模塊,如果使用 --production 參數(shù),可以只安裝 dependencies 字段的模塊:

$npm install
和
$npm install --production 

一旦安裝了某個模塊,就可以在代碼中用 require 命令加載這個模塊,例如:

let backbone = require('backbone')

package.json 的版本控制

例如:

"cluster": ">= 0.7.7",
"commander": "^2.6.0",
"async" : "*",
第一種:
貌似通過字面意思你應該懂得, cluster 版本必須大于等于 0.7.7
npm 安裝的時候你也可以這樣指定:
npm install cluster@">=0.7.7"
甚至你可以把版本范圍指定到更小
npm install cluster@">=0.7.7<0.8.0"
讓安裝的版本大于0.7.7并且小于 0.8.0

第二種:
^ 符號表示,可以接受小版本和補丁版本的變化.簡單說就是大版本不變即可,其他版本隨便更新.
"commander":"^2.6.0"  
當我們npm install 的時候,安裝到 node_modules 目錄下的 
commander開源包可能是 2.6.0 或 2.7.3 或 2.8.9

第三種:
"async": " * "
最糟糕的一種版本控制,一點限制沒有.

第四種:
當主版本號/次版本號/修訂版本號為X or x or *時,
那么update或install是會下載該分支最新的版本號

第五種:
波浪號(~)是限定模塊的次要版本
~1.5.1允許安裝版本號大于1.5.1但小于1.6.0版本的模塊

scripts 腳本

npm 不僅可以用于模塊管理,還可以用于執(zhí)行腳本。package.json 文件有一個 scripts 字段,可以用于指定腳本命令,供 npm 直接調用。

顧名思義,scripts就是一些腳本代碼,可以通過
npm run script-key 來調用,例如在這個 package.json 的文件夾下使用npm run dev就相當于運行了node build/dev-server.js這一段代碼。使用 scripts 的目的就是為了把一些要執(zhí)行的代碼合并到一起,使用 npm run 來快速的運行,方便省事。
npm run 是 npm run-script 的縮寫,一般都使用前者,但是后者可以更好的反應這個命令的本質。

更換源

  1. 全局安裝nrm
$ npm install -g nrm
  1. 列出可選的源:
    帶*號的表示當前在使用的源
$nrm ls
* npm ---- https://registry.npmjs.org/
  cnpm --- http://r.cnpmjs.org/
  taobao - https://registry.npm.taobao.org/
  nj ----- https://registry.nodejitsu.com/
  npmMirror  https://skimdb.npmjs.com/registry/
  edunpm - http://registry.enpmjs.org/
  1. 切換成淘寶源:
 $ nrm use taobao
  Registry has been set to: https://registry.npm.taobao.org/
  1. 測試所有源的響應時間:
$nrm test    
 npm ---- 314ms
  cnpm --- 350ms
* taobao - 300ms
  nj ----- Fetch Error
  npmMirror  1153ms
  edunpm - Fetch Error
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容