NPM(node package manager)
主要功能:安裝、卸載、更新、查看、搜索、發佈javascript
1.npm的配置
2.npm的使用:package的安裝、卸載、升級、查看、搜索、發佈html
npm包的安裝模式,本地 vs 全局java
package版本:常見版本聲明形式node
3.package.json:包描述信息git
npm set
github
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
。1.npm set save-exact true
上面命令設置加入模塊時,package.json將記錄模塊的確切版本,而不是一個可選的版本範圍。redis
2.npm config get prefix
express
3.npm config set prefix /usr/local
npm
npm install grunt-cli
安裝以前,npm install會先檢查,node_modules目錄之中是否已經存在指定模塊。若是存在,就再也不從新安裝了,即便遠程倉庫已經有了一個新版本,也是如此。
若是你但願,一個模塊不論是否安裝過,npm 都要強制從新安裝,可使用-f或--force參數。json
本地安裝: package會被下載到當前所在目錄,也只能在當前目錄下使用。安裝結束後,當前目錄下回多出一個node_modules目錄,grunt-cli就安裝在裏面。npm install -g grunt-cli
全局安裝:package會被下載到到特定的系統目錄下,安裝的package可以在全部目錄下使用。如今變成了/usr/local/lib/node_modules/grunt-cli,/usr/local/lib/node_modules/也就是以前所說的全局安裝目錄啦。
1.安裝當前目錄package.json文件中配置的devDependencies模塊npm install
2.安裝本地的模塊文件npm install ./package.tgz
3.安裝指定URL的模塊npm install https://github.com/indexzero/forever/tarball/v0.5.6
4.安裝本地文件系統中指定的目錄包含的模塊npm install <folder>
5.安裝並更新package.json中的版本配置npm install <name> [–save|–save-dev|–save-optional]
添加–save 參數安裝的模塊的名字及其版本信息會出如今package.json的dependencies選項中
添加–save-dev 參數安裝的模塊的名字及其版本信息會出如今package.json的devDependencies選項中
添加–save-optional 參數安裝的模塊的名字及其版本信息會出如今package.json的optionalDependencies選項中
6.安裝模塊的指定版本npm install <name>@<version>
Example:npm install underscore@1.5.2
7.安裝模塊指定版本號範圍內的某一個版本npm install <name>@<version range>
Example:npm install async@」>=0.2.0 <0.2.9″
–force
強制拉取遠程資源,即便本地已經安裝這個模塊
Example:npm install underscore –force
8.-g或–global
全局安裝模塊,若是沒有這個參數,會安裝在當前目錄的node_modules子目錄下
Example:npm install -g express
若是你但願,全部模塊都要強制從新安裝,那就刪除node_modules目錄,從新執行npm install。
$ rm -rf node_modules $ npm install
npm update [-g] [<name> [<name> … ]
更新指定name列表中的模塊。-g參數更新全局安裝的模塊。
若是沒有指定name,且不是在某個模塊內,會更新當前目錄依賴的全部包都會被更新(包括全局和模塊內);若是當前目錄在某個模塊目錄內,會更新該模塊依賴的模塊,因此不指定name直接運行npm update時,最好在某個模塊內運行,以避免更新到其餘不想更新的模塊。
npm uninstall package
查看安裝了那些包npm ls --depth=0
查看特定包具體信息npm ls grunt-cli
npm info grunt-cli
npm search grunt-cli
npm命令運行時會讀取當前目錄的 package.json 文件和解釋這個文件,這個文件基於 Packages/1.1規範。在這個文件裏你能夠定義你的應用名稱( name )、應用描述( description )、關鍵字( keywords )、版本號( version )、應用的配置項( config )、主頁( homepage )、做者( author )、資源倉庫地址( repository )、bug的提交地址( bugs ),受權方式( licenses )、目錄( directories )、應用入口文件( main )、命令行文件( bin )、應用依賴模塊( dependencies )、開發環境依賴模塊( devDependencies )、運行引擎( engines )和腳本( scripts )等。
對於開發者而言,開發和發佈模塊都依賴於他對這個文件 package.json 所包含的意義的正確理解。咱們下面用一個本文共用的例子來講明:
{ "name": "test", "version": "0.1.0", "description": "A testing package", "author": "A messed author <messed@example.com>", "dependencies": { "express": "1.x.x", "ejs": "0.4.2", "redis": ">= 0.6.7" }, "devDependencies": { "vows": "0.5.x" }, "main": "index", "bin": { "test": "./bin/test.js" }, "scripts": { "start": "node server.js", "test": "vows test/*.js", "preinstall": "./configure", "install": "make && make install" }, "engines": { "node": "0.4.x" } }
這個例子裏咱們定義了應用的入口文件( main )爲 index ,當其餘應用引用了咱們的模塊 require('test') 時,這個 main 的值 index.js 文件被調用。腳本( scripts )使用hash 表定義了幾個不一樣的命令。script.start 裏的定義的 node server.js 會在 npm start 時被調用,一樣的 npm test 調用時對應的 scripts.test 裏定義的命令被調用。在有些 native 模塊須要編譯的話,咱們能夠定義預編譯和編譯的命令。
本例中還定義了應用依賴模塊( dependencies )和開發環境依賴模塊( devDependencies )。應用依賴模塊會在安裝時安裝到當前模塊的 node_modules 目錄下。開發環境依賴模塊主要時在開發環境中用到的依賴模塊,用命令 npm 的命令 install 或 link 加上參數 —dev 安裝到當前模塊的 node_modules 目錄下。
name: package的名字(因爲他會成爲url的一部分,因此 non-url-safe 的字母不會經過,也不容許出現"."、"_"),最好先在[](http://registry.npmjs.org/上搜下你取的名字是否已經存在)
version: package的版本,當package發生變化時,version也應該跟着一塊兒變化,同時,你聲明的版本須要經過semver的校驗(semver可自行谷歌)
dependencies: package的應用依賴模塊,即別人要使用這個package,至少須要安裝哪些東東。應用依賴模塊會安裝到當前模塊的node_modules目錄下。
devDependencies:package的開發依賴模塊,插件發佈的時候自動刪除不相關代碼。用個文件記錄一下當前項目中安裝或者須要的插件,即別人要在這個package上進行開發,能夠一鍵安裝項目所需插件。
其餘:參見官網
你們也注意到 package.json 裏的版本號有些是 >= 0.6.7 有些是 1.x.x,這有什麼區別?npm 使用於語義化的版本識別來進行版本管理。並非全部的模塊都會提供向後兼容性,有時候某些模塊由於某些緣由致使不向後兼容。因此咱們須要定義一些規則來保證模塊可以在某些特定的版本中可用,而且保證能用最新的版本,由於那些版本老是修改了一些 bug 或提高了性能等。咱們來看一下版本定義的字段:
例子:0.4.2 + 大版本(0) + 小版本(4) + 補丁版本(2)
一個軟件發佈的時候,默認就是 1.0.0 版。若是之後發佈補丁,就增長最後一位數字,好比1.0.1;若是增長新功能,且不影響原有的功能,就增長中間的數字(即小版本號),好比1.1.0;若是引入的變化,破壞了向後兼容性,就增長第一位數字(即大版本號),好比2.0.0。
在上面 package.json 的定義裏咱們確信模塊在全部的 Nodejs 0.4及以上和0.5如下版本里都能運行。依賴模塊 redis 在全部大於或等於0.6.7的版本上都能運行,依賴模塊 ejs 只能確保運行在0.4.2版本里,依賴模塊 express 確保可以兼容大於或等於1.0.0而且小於2.0.0。
npm init
用來初始化生成一個新的package.json文件。它會向用戶提問一系列問題,若是你以爲不用修改默認配置,一路回車就能夠了。
若是使用了-f(表明force)、-y(表明yes),則跳過提問階段,直接生成一個新的package.json文件。