npm 檢視目前源
npm config get registry
npm config set registry https://registry.npm.taobao.org
npm config set registry https://registry.npmjs.org
什麼是NPM
npm 是 Node.js 官方提供的包管理工具,他已經成了 Node.js 包的标準釋出平台,用于 Node.js 包的釋出、傳播、依賴控制。npm 提供了指令行工具,使你可以友善地下載下傳、安裝、更新、删除包,也可以讓你作為開發者釋出并維護包。
為什麼要使用 NPM
- 允許使用者從 npm 伺服器下載下傳别人編寫的第三方包到本地使用。
- 允許使用者從 npm 伺服器下載下傳并安裝别人編寫的指令行程式到本地使用。
- 允許使用者将自己編寫的包或指令行程式上傳到 npm 伺服器供别人使用。
- 将開發者從繁瑣的包管理工作(版本、依賴等)中解放出來,更加專注于功能的開發。
簡單來說:npm是node.js提供的包管理工具,可以讓開發者下載下傳或上傳可以複用的代碼。
npm 的包安裝分為本地安裝(local)、全局安裝(global)兩種
本地安裝
- 1. npm 在預設情況下會從http://npmjs.org 搜尋或下載下傳包,将安裝包放在 ./node_modules 下(運作 npm 指令時所在的目錄),如果沒有 node_modules 目錄,會在目前執行 npm 指令的目錄下生成 node_modules 目錄。
- 2. 可以通過 require() 來引入本地安裝的包。
- 3. 本地安裝指的是将一個子產品下載下傳到目前項目的 node_modules 子目錄,然後隻有在項目目錄之中,才能調用這個子產品。
全局安裝
- 1. 将安裝包放在 /usr/local 下或者你 node 的安裝目錄。
- 2. 可以直接在指令行裡使用。
如果把包安裝到全局,可以提供程式的重複利用程度,避免同樣的内容的多分副本,但壞處是難以處理不同的版本依賴。如果把包安裝到目前目錄,或者說本地,則不會有不同程式依賴不同版本的包的沖突問題,同時還減輕了包作者的 API 相容性壓力,但缺陷則是同一個包可能會被安裝許多次。
本地模式和全局模式的特點如下:
模式 | 可通過 require 使用 | 注冊 PATH |
本地模式 | 是 | 否 |
全局模式 | 否 | 是 |
# 本地安裝
npm install <package name>
# 全局安裝
npm install -global <package name>
npm install -g <package name>
Npm常用指令詳解
檢視npm版本:npm -v
更新npm:npm install npm -g/npm i npm -g // install可簡寫為i
使用淘寶鏡像:npm install -g cnpm --registry=https://registry.npm.taobao.org
檢視所有全局安裝的子產品:npm list -g
npm init: npm init
用來初始化生成一個新的 package.json 檔案。它會向使用者提問一系列問題,如果你覺得不用修改預設配置,一路回車就可以了。
如果使用了 -f(代表force)、-y(代表yes,npm init -y),則跳過提問階段,直接生成一個新的 package.json 檔案。
npm cache clean -f 清除緩存
npm install
npm install/i [package_name]
安裝之前,npm install 會先檢查,node_modules 目錄之中是否已經存在指定子產品。如果存在,就不再重新安裝了,即使遠端倉庫已經有了一個新版本,也是如此。
如果你希望,一個子產品不管是否安裝過, npm 都要強制重新安裝,可以使用 -f 或 --force 參數。
npm install <packageName> --force
安裝不同版本
install 指令總是安裝子產品的最新版本,如果要安裝子產品的特定版本,可以在子產品名後面加上 @ 和版本号。
npm install sax@latest
npm install [email protected]
npm install sax@">=0.1.0 <0.2.0"
install 指令可以使用不同參數,指定所安裝的子產品屬于哪一種性質的依賴關系,即出現在 packages.json 檔案的哪一項中。
–save:子產品名将被添加到 dependencies,可以簡化為參數-S。
–save-dev:子產品名将被添加到 devDependencies,可以簡化為參數-D。
npm install sax --save
npm install node-tap --save-dev
# 或者
npm install sax -S
npm install node-tap -D
npm install 預設會安裝 package.json 中 dependencies 字段和 devDependencies 字段中的所有子產品,如果使用 --production 參數,可以隻安裝 dependencies 字段的子產品。
npm install --production
# 或者
NODE_ENV=production npm install
一旦安裝了某個子產品,就可以在代碼中用 require 指令加載這個子產品。
var backbone = require('backbone')
console.log(backbone.VERSION)
npm install 也支援直接輸入 Github 代碼庫位址:
npm install git://github.com/package/path.git
npm install git://github.com/package/path.git#0.1.0
- npm install 子產品:安裝好後不寫入package.json中
- npm install 子產品 --save安裝好後寫入package.json的dependencies中(生産環境依賴)
- npm install 子產品 --save-dev安裝好後寫入package.json的devDepencies中(開發環境依賴)
npm set: 用來設定環境變量
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'
上面指令等于為 npm init 設定了預設值,以後執行 npm init 的時候,package.json 的作者姓名、郵件、首頁、許可證字段就會自動寫入預設的值。這些資訊會存放在使用者主目錄的 ~/.npmrc檔案,使得使用者不用每個項目都輸入。如果某個項目有不同的設定,可以針對該項目運作 npm config。
npm info
npm info
指令可以檢視每個子產品的具體資訊。比如,檢視 underscore 子產品的資訊。
npm info underscore
上面指令傳回一個 JavaScript 對象,包含了 underscore 子產品的詳細資訊。這個對象的每個成員,都可以直接從 info 指令查詢。
npm info underscore description
npm info underscore homepage
npm info underscore version
npm search
npm search
指令用于搜尋 npm 倉庫,它後面可以跟字元串,也可以跟正規表達式。
$ npm search <搜尋詞>
npm list
npm list 指令以樹形結構列出目前項目安裝的所有子產品,以及它們依賴的子產品。
$ npm list
# 加上 global 參數,會列出全局安裝的子產品
$ npm list -global
# npm list 指令也可以列出單個子產品
$ npm list underscore
npm run
npm 不僅可以用于子產品管理,還可以用于執行腳本。package.json 檔案有一個 scripts 字段,可以用于指定腳本指令,供 npm 直接調用。
package.json
{
"name": "myproject",
"devDependencies": {
"jshint": "latest",
"browserify": "latest",
"mocha": "latest"
},
"scripts": {
"lint": "jshint **.js",
"test": "mocha test/"
}
}
- npm uninstall -g <package>
- npm uninstall 子產品:删除子產品,但不删除子產品留在package.json中的對應資訊
- npm uninstall 子產品 --save删除子產品,同時删除子產品留在package.json中dependencies下的對應資訊
- npm uninstall 子產品 --save-dev删除子產品,同時删除子產品留在package.json中devDependencies下的對應資訊