重溫NPM

本文字數7300+,圖片19張,閱讀時間約爲18分鐘。
html

第一節:NPM基本信息

【01】官方網址: www.npmjs.com/

【02】文檔網址: docs.npmjs.com/

【03】安裝包搜索地址: www.npmjs.com/


【04】npm 包
數量: 700,000+

【05】node.js 安裝後,等於npm也安裝好了。

【06】有哪些知名的包:
有網站開發框架,有 MySQL、PostgreSQL、MongoDB 數據庫接口。
有模板語言解析、CSS 生成工具、郵件、加密、圖形、調試支持。
有圖形用戶界面和操做系統 API工具。

【07】npm是什麼?
NPM(node package manager)。
是node包的管理器。(包又稱爲模塊)

【08】npm的用途?
將開發者從包管理工做(版本、依賴等)中解放出來,更加專一於功能的開發。
能夠對模塊進行管理:
  • 安裝
  • 卸載
  • 更新
  • 查看
  • 搜索
  • 發佈本身的包提供給別人使用。

【09】npm的實質是什麼?
npm的背後,是基於couchdb的一個數據庫,記錄了每一個包的信息,包括做者、版本、依賴、受權信息等。
【10】如何判斷npm安裝成功?
經過在終端輸入 "npm -v" 來測試是否成功安裝。
命令以下,出現版本提示表示安裝成功:
npm -v
6.4.1複製代碼

【11】若是以前是在官網下載的 node 安裝包,運行後會自動安裝在全局目錄,其中node

node 命令在 /usr/local/bin/node ,npm 命令在全局 node_modules 目錄中,具體路徑爲 /usr/local/lib/node_modules/npmgit

【12】版本號
使用NPM下載和發佈代碼時都會接觸到版本號。
NPM使用語義版本號來管理代碼。
語義版本號分爲X.Y.Z三位,分別表明主版本號、次版本號和補丁版本號。

當代碼變動時,版本號按如下原則更新:
  • 若是隻是修復bug,須要更新Z位。
  • 若是是新增了功能,可是向下兼容,須要更新Y位。
  • 若是有大變更,向下不兼容,須要更新X位。
版本號有了這個保證後,在申明第三方包依賴時,除了可依賴於一個固定版本號外,還可依賴於某個範圍的版本號。例如"argv": "0.0.x"表示依賴於0.0.x系列的最新版argv。

NPM支持的全部版本號範圍指定方式能夠查看 官方文檔

——————————我是垃圾分類的分割線————————

第二節:經過npm安裝包


【00】npm在默認狀況下會從http://npmjs.org搜索或下載包,將包安裝到當前目錄的node_modules子目錄下。
若是沒有 node_modules 目錄,會在當前執行 npm 命令的目錄下生成 node_modules 目錄。
【01】安裝包
方式1:
安裝最新版本的模塊語法:
安裝特定版本的模塊。

【02】npm install 全部的參數形式
npm install --help複製代碼
npm install <tarball file>
npm install <tarball url>
npm install <folder>
npm install <pkg>
npm install <pkg>@<tag>
npm install <pkg>@<version>
npm install <pkg>@<version range>
複製代碼

【03】安裝包時,將包信息添加到package.json中。這樣代碼提交到github時,就不用提交node_modules這個文件夾了。github

npm install module_name --save
數據庫

【04】本地安裝(local) vs 全局安裝(global)本地安裝:
express

0一、package會被下載到當前所在目錄的node_modules文件夾中,也只能在當前目錄下使用。(運行 npm 命令時所在的目錄)

0二、安裝方式:npm install module_name
測試結果:


簡單說明一下:npm

grunt-cli@0.1.9:當前安裝的package爲grunt-cli,版本爲0.19
node_modules/grunt-cli:安裝目錄
resolve@0.3.1:依賴的包有resolve、nopt、findup-sync,它們各自的版本、依賴在後面的括號裏列出來。

0三、能夠經過require("module_name");來引用模塊,無需指定模塊路徑。
例子:
var express = require('express');
複製代碼
0四、不能經過命令行來運行它們,由於沒有註冊PATH環境變量。
只能在對應安裝目錄下使用。

全局安裝:

0一、包會被下載到到特定的系統目錄下,安裝的package可以在全部目錄下使用。
主要的區別在於安裝目錄,如今變成了/usr/local/lib/node_modules/grunt-cli ,/usr/local/lib/node_modules/ 也就是以前所說的全局安裝目錄啦。
grunt-cli@0.1.9 /usr/local/lib/node_modules/grunt-cli
├── resolve@0.3.1
├── nopt@1.0.10 (abbrev@1.0.4)
└── findup-sync@0.1.2 (lodash@1.0.1, glob@3.1.21)
複製代碼

0二、安裝方式:npm install module_name -g
0三、將安裝包放在 /usr/local 下。
0四、能夠直接在終端命令行裏使用。
0五、不能經過 require("module_name") 來引入本地安裝的包。由於 require 不會搜索 /usr/local/lib/node_modules/。

【05】爲何要使用全局模式?
當咱們要把某個包做爲工程運行時的一部分時,經過本地安裝獲取,若是要在命令行下使用,則使用全局安裝。
由於須要註冊PATH環境變量。這樣才能夠在命令行中運行它。
也能夠是許多程序都須要使用它,減小多個副本。
好比:gulp xx.js。
npm本地安裝,只是把包安裝在項目根目錄下的node_modules中。其中的bin目錄並無包含在PATH環境變量中,不能直接在命令行中調用。

而當咱們使用全局模式安裝時,npm 會將包安裝到系統目錄,譬如 /usr/local/lib/node_modules/,同時 package.json 文件中 bin 字段包含的文件會被連接到 /usr/local/bin/。/usr/local/bin/ 是在PATH 環境變量中默認定義的,所以就能夠直接在命令行中運行 gulp script.js命令了。

第三節:npm經常使用命令

【01】卸載包

卸載grunt-cli
npm uninstall grunt-cli
複製代碼
結果:

卸載0.1.9版本的grunt-cli
npm uninstall grunt-cli@"0.1.9"
複製代碼

【02】查看包

方式1:查看當前項目,安裝了哪些包
npm ls
方式2:查看全局安裝了哪些包
npm ls -g
方式3:查看某個具體的包
npm ls grunt-cli
npm ls babel-cli@6.26.0
方式4:查看某個具體的包的全面信息,包括做者、版本、依賴等。
npm info grunt-cli

【03】更新包

npm update packageName
npm update grunt-cli

【04】搜索包

npm search module_name
npm search grunt-cli複製代碼

【05】升級npm本身

能夠經過npm安裝本身就能夠升級了。
npm install npm -g
複製代碼

【06】刪除包

npm rm package_name[@版本號] [package_name[@版本號]...]json

使用這個命令刪除包。若是省略版本號, 那麼這個包的全部被找到的版本都將被刪除。gulp

舉例:windows

npm rm sax
複製代碼

若是你想刪除以全局模式安裝的包,你須要在命令中顯式的使用」-g」參數:
npm rm -g express
複製代碼

【07】查看幫助命令

npm help

【08】初始化

會引導你建立一個package.json文件,包括名稱、版本、做者這些信息等。
npm init
複製代碼

第四節:一些不經常使用的命令

【01】清空NPM本地緩存
用於處理使用相同版本號發佈新版本代碼的人。
npm cache clear
複製代碼
【02】撤銷發佈本身發佈過的某個版本代碼
npm unpublish package@version
複製代碼
【03】查看
0一、查看node模塊的package.json中的信息。
//moduleNames 是模塊名
npm view moduleNames 
複製代碼
例子:
npm view express
複製代碼
結果截圖:

注意事項:若是想要查看package.json文件夾下某個屬性的內容,可使用
npm view moduleName labelName
複製代碼
0二、查看包的依賴關係:
npm view moudleName dependencies
複製代碼
0三、查看包的源文件地址
npm view moduleName repository.url
複製代碼
0四、查看包所依賴的Node的版本
npm view moduleName engines
複製代碼
zyx456結果:
【04】檢查包是否已通過時,此命令會列出全部已通過時的包,能夠及時進行包的更新
npm outdated
複製代碼
【05】訪問包的package.json文件
一個npm包是包含了package.json的文件夾,package.json描述了這個文件夾的結構。訪問npm的json文件夾的方法以下:
npm help json 
複製代碼
此命令會以默認的方式打開一個網頁,若是更改了默認打開程序則可能不會以網頁的形式打開。
結果:

【06】查看當前包的安裝路徑
npm root
複製代碼



【07】查看全局的包的安裝路徑
npm root -g複製代碼

第五節:對NPM配置

【01】方式1:
直接修改配置文件。
有時候以爲一條配置一條配置地修改有些麻煩,就直接進配置文件修改了
npm config edit
這個命令會打開.npmrc文件。以記事本的方式打開。 複製代碼


【02】方式2:
經過npm config命令,包含增、刪、改、查。
以最爲經常使用的proxy配置爲例。
設置proxy
內網使用npm很頭痛的一個問題就是代理,假設咱們的代理是 proxy.example.com:8080,那麼命令以下:
npm config set proxy http://proxy.example.com:8080
複製代碼
因爲 npm config set 命令比較經常使用,因而能夠以下簡寫
npm set proxy http://proxy.example.com:8080    
複製代碼
查看proxy
設置完,咱們查看下當前代理設置
npm config get proxy
複製代碼
輸出以下:
http://proxy.example.com:8080/
複製代碼
一樣可以下簡寫:
npm get proxy
複製代碼
刪除proxy
代理不須要用到了,那刪了吧
npm delete proxy
複製代碼
【03】查看全部配置
npm config list
複製代碼
測試:


第六節:nrm(npm源管理工具)

【01】nrm

nrm (https://github.com/Pana/nrm)是一個管理 npm 源的工具。

好比可使用淘寶鏡像,這樣安裝和更新會比較快。慢的緣由,國情,你懂得。

nrm 用來切換官方 npm 源和國內的 npm 源(如: cnpm),也能夠用來切換官方 npm 源和公司私有 npm 源。

【02】全局安裝 nrm:

npm i nrm -g複製代碼

查看當前 nrm 內置的幾個 npm 源的地址:

切換到 cnpm:

nrm use cnpm
複製代碼

【】zyx456:安裝nrm後,使用nrm ls。告訴我缺失了不少庫。

Cannot find module 'config-chain'

Error: Cannot find module 'nopt'

Error: Cannot find module 'osenv'


Error: Cannot find module 'umask'

Error: Cannot find module 'npmlog'

Error: Cannot find module 'has-unicode'


Error: Cannot find module 'uid-number'

Error: Cannot find module 'abbrev'

Error: Cannot find module 'npm-registry-client'

Error: Cannot find module 'chownr'

Error: Cannot find module 'dezalgo'

Error: Cannot find module 'npm-cache-filename'


……………………給本身的耐心點個贊。



第七節:package.json的基本信息

【01】是項目中全部的包的描述信息。
是JSON格式,不能是JS對象。

假設當咱們下載了node應用,這個node應用依賴於A、B、C三個包,若是沒有package.json,咱們須要手動逐次安裝這三個包(若是對版本有特定要求就更悲劇了):
npm install A
npm install B
npm install C
複製代碼
有了package.json,一行命令安裝全部依賴。
npm install
複製代碼

【02】package.json字段簡介
字段至關多,但最重要的的是下面幾個。

0一、name:
包的名字(因爲它會成爲url的一部分,因此不符合url規則的字母不會經過,也不容許出現"."、"_"),最好先在 registry.npmjs.org/上搜下你取的名字是否已…
會出如今require()中,最好用有含義的名字。

0二、version:
package的版本,當package發生變化時,version也應該跟着一塊兒變化,同時,你聲明的版本須要經過semver的校驗(semver可自行谷歌) node-semver

0三、dependencies:
package的應用依賴模塊,即別人要使用這個package,至少須要安裝哪些東東。應用依賴模塊會安裝到當前模塊的node_modules目錄下。
"dependencies": {
    "request": "*",
    "async": "*"
}
複製代碼
這個文件代表這個應用程序依賴的模塊是」request」和」async」,不限版本, 用」*」代表任意版本都可使用。若是這個應用程序依賴某個特定的模塊版本,應當像這樣指定版本號:
"dependencies": {
    "request": "2.27.0",
    "async": "0.2.9"
  }
複製代碼
這裏咱們限定這個應用程序使用這兩個特定版本,但咱們能夠更加寬鬆的限定版本號的範圍:
"dependencies": {
    "request": "2.27.x",
    "async": "0.2.x"
  }
複製代碼
0四、main

指定一個入口文件,

若是你包的名字叫foo,而後用戶require("foo"),main配置的模塊的exports對象會被返回。

這應該是一個相對於根目錄的文件路徑。

"main": "js/entry.js",

main 字段是一個模塊ID,它是一個指向你程序的主要項目。就是說,若是你包的名字叫 express,而後用戶安裝它,而後require("express")。

0五、devDependencies:
package的開發依賴模塊,即別人要在這個package上進行開發須要的包。

若是有人要使用你的模塊,那麼他們可能不須要你開發使用的外部測試或者文檔框架。

在這種狀況下,最好將這些附屬的項目列在devDependencies中。

這些東西會在執行npm link或者npm install的時候初始化,並能夠像其餘npm配置參數同樣管理。

【03】其餘:
參見官網

  • description - 包的描述。字符串。便於在npm search搜索。
  • homepage - 包的官網 url 。
  • author - 包的做者姓名。
  • contributors - 包的其餘貢獻者姓名。
  • dependencies - 依賴包列表。若是依賴包沒有安裝,npm 會自動將依賴包安裝在 node_module 目錄下。
  • repository - 包代碼存放的地方的類型,能夠是 git 或 svn,git 可在 Github 上。
  • keywords - 關鍵字,數組或字符串。便於在npm search搜索。
  • scripts- 「scripts」是一個由腳本命令組成的hash對象,他們在包不一樣的生命週期中被執行。key是生命週期事件,value是要運行的命令。

第八節:node多版本管理器概念

【01】迄今爲止Node.js 更新速度還很快,有時候新版本還會將舊版本的一些 API 廢除,以致於寫好的代碼不能向下兼容。有時候想要嘗試一下新版本有趣的特性,但又想要保持一個相對穩定的環境。


基於這種需求,Node.js 的社區開發了多版本管理器,用於在一臺機器上維護多個版本的 Node.js 實例,方便按需切換。

【02】Node 多版本管理器( Node Version Manager,nvm)是一個通用的叫法,它目前有許多不一樣的實現。

【03】一般有2種nvm。
第一種: github.com/creationix/…nvm 不支持 Windows。

第二種: github.com/visionmedia…
筆者根據我的偏好推薦使用 visionmedia/n。( n 不支持 Windows。

若是你使用Windows系統,能夠改用 nvmwnvm-windows代替。
相關文章
相關標籤/搜索