npm 使用小結


本文內容基于 npm 4.0.5

概述

npm (node package manager),即 node 包管理器。這里的 node 包就是指各種 javascript 庫。

npm 是隨同 Node.js 一起安裝的包管理工具,所以不需要獨立安裝。

可以通過查看版本號來檢測 npm 是否已經安裝成功:

npm -v

如果已經安裝了npm,想要升級,只需要一條命令即可:

npm install npm -g

package.json

簡介

使用 npm 來管理的 javascript 項目一般都有一個package.json文件。它定義了這個項目所依賴的各種包,以及項目的配置信息(比如名稱、版本、依賴等元數據)。

package.json 中的內容就是 json 形式。

重要字段

  • name - 包名。

  • version - 包的版本號。

  • description - 包的描述。

  • homepage - 包的官網 url 。

  • author - 包的作者姓名。

  • contributors - 包的其他貢獻者姓名。

  • dependencies - 指定項目運行所依賴的模塊。

  • devDependencies - 指定項目開發所依賴的模塊。

  • repository - 包代碼存放的地方的類型,可以是 git 或 svn,git 可在 Github 上。

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

  • keywords - 關鍵字

  • bin - 用來指定各個內部命令對應的可執行文件的位置。

  • scripts - 指定了運行腳本命令的npm命令行縮寫。

例:一個完整的package.json

{
  "name": "reactnotes",
  "version": "1.0.0",
  "description": "react 教程",
  "main": "./index.js",
  "dependencies": {
    "react": "^15.4.1",
    "react-dom": "^15.4.1"
  },
  "devDependencies": {
    "webpack-dev-server": "^1.16.2"
  },
  "scripts": {
    "start": "node index.js"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/atlantis1024/ReactNotes.git"
  },
  "author": "victor",
  "license": "Apache-2.0",
  "bugs": {
    "url": "https://github.com/atlantis1024/ReactNotes/issues"
  },
  "homepage": "https://github.com/atlantis1024/ReactNotes#readme"
}

package 版本

上文介紹 package.json 文件中的 dependenciesdevDependencies 字段,這二者都是 json 數組。它們的每個 json 子對象,key 表示包名,value 表示版本。

npm 允許的版本聲明方式十分多樣。下面將為你介紹一二。

說明

  • version :安裝一個確定的版本,遵循“大版本.次要版本.小版本”的格式規定。如:1.0.0。
  • ~version :以 ~1.0.0 來舉例,表示安裝1.0.x的最新版本(不低于1.0.0)。但是大版本號和次要版本號不能變。
  • ^version :以 ^1.0.0 來舉例,表示安裝1.x.x的最新版本(不低于1.0.0),但是大版本號不能變。
  • 1.2.x :表示安裝1.2.x。
  • >、>=、<、<= :可以像數組比較一樣,使用比較符來限定版本范圍。
  • version1 - version2 :相當于 >=version1 <=version2.
  • range1 || range2 :版本滿足range1 或 range2 兩個限定條件中任意一個即可。
  • tag :一個指定 tag 對應的版本。
  • *"" (空字符串):任意版本。
  • latest :最新版本。
  • http://...file://... :你可以指定http或本地文件路徑下的包作為版本。
  • git... :參考下面的“直接將 Git Url 作為依賴包版本”
  • user/repo :參考下面的“直接將 Git Url 作為依賴包版本”

例:下面的版本聲明都是有效的

{ "dependencies" :
  { "foo" : "1.0.0 - 2.9999.9999"
  , "bar" : ">=1.0.2 <2.1.2"
  , "baz" : ">1.0.2 <=2.3.4"
  , "boo" : "2.0.1"
  , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
  , "asd" : "http://asdf.com/asdf.tar.gz"
  , "til" : "~1.2"
  , "elf" : "~1.2.3"
  , "two" : "2.x"
  , "thr" : "3.3.x"
  , "lat" : "latest"
  , "dyl" : "file:../dyl"
  }
}

直接將 Git Url 作為依賴包版本

Git Url形式可以如下:

git://github.com/user/project.git#commit-ish
git+ssh://user@hostname:project.git#commit-ish
git+ssh://user@hostname/project.git#commit-ish
git+http://user@hostname/project/blah.git#commit-ish
git+https://user@hostname/project/blah.git#commit-ish

常用命令

npm 的命令很多,這里,我挑選幾條 npm 中比較重要的命令來介紹。

更多詳情可以參考 <u>npm 官方文檔</u>

help

個人認為這是最重要的命令。對命令行的用法有問題的時候,還有什么比查看幫助信息更有用呢?

查看 npm 命令列表**

npm -h

查看所有命令使用方法

npm -l

查看某條命令詳細幫助信息

如:要查看 npm install 命令的詳細幫助信息

  • 查看命令的快捷幫助信息
npm install -h
  • 打開命令的幫助文檔
npm help install

npm init

npm init 用于初始化一個新的package.json文件。

命令格式

npm init [-f|--force|-y|--yes]

說明

執行命令后,npm 會問你一系列問題,然后在執行命令的目錄下創建一個package.json文件。

如果使用 -f / --force-y / --yes ,npm 會使用默認值為你創建 package.json 文件,不再詢問任何問題。

npm install

npm install 用于安裝模塊。

命令格式

npm install (with no args, in package dir)
npm install [<@scope>/]<name>
npm install [<@scope>/]<name>@<tag>
npm install [<@scope>/]<name>@<version>
npm install [<@scope>/]<name>@<version range>
npm install <tarball file>
npm install <tarball url>
npm install <folder>

alias: npm i
common options: [-S|--save|-D|--save-dev|-O|--save-optional] [-E|--save-exact] [-B|--save-bundle] [--dry-run]

說明

  • npm install (with no args, in package dir)

    默認的,將 package.json 中聲明的所有模塊安裝到當前路徑下的 node_modules 目錄中。這稱為本地安裝

    如果,加上 -g, --global 參數,npm 會將當前包安裝到全局(系統目錄下),這稱為全局安裝

  • npm install <folder>

    安裝位于文件系統上某文件夾中的包。

  • npm install <tarball file>

    安裝位于文件系統上的包。注意:如果你只想鏈接一個 dev 目錄到你的 npm 根目錄,使用 npm link 更容易做到這一點。

    例:

    npm install ./package.tgz
    
  • npm install <tarball url>

    獲取 url,然后安裝它。為了區分此選項和其他選項,參數必須以“http://”或“https://”開頭。

    例:

    npm install https://github.com/indexzero/forever/tarball/v0.5.6
    
  • npm install [<@scope>/] [-S|--save|-D|--save-dev|-O|--save-optional]

    例:

    npm install sax
    

    npm install 有3個可選參數,用于保存或更新主package.json中的包版本:

    • -S, --save:包將被添加到 dependencies

    • -D, --save-dev:包將被添加到 devDependencies

    • -O, --save-optional:包將被添加到 optionalDependencies

    當使用上述任何選項將依賴保存到package.json時,有兩個額外的可選標志:

    • -E, --save-exact :會在 package.json 文件指定安裝模塊的確切版本。
    • -B, --save-bundle : 包也將被添加到bundleDependencies
  • npm install [<@scope>/]<name>@<tag>

    安裝被 tag 引用的包的版本。如果 tag 不存在于該包的注冊表數據中,則失敗。
    例:

    npm install sax@latest
    npm install @myorg/mypackage@latest
    
  • npm install [<@scope>/]<name>@<version>

    安裝指定的包的版本。如果版本尚未發布到注冊表,則失敗。

    例:

    npm install sax@0.1.1
    npm install @myorg/privatepackage@1.5.0
    
  • npm install [<@scope>/]<name>@<version range>
    安裝與指定版本范圍相匹配的包版本。

    例:

    npm install sax@">=0.1.0 <0.2.0"
    npm install @myorg/privatepackage@">=0.1.0 <0.2.0"
    

npm uninstall

npm uninstall 用于卸載包。

命令格式

npm uninstall [<@scope>/]<pkg>[@<version>]... [-S|--save|-D|--save-dev|-O|--save-optional]

aliases: remove, rm, r, un, unlink

說明

在全局模式下(即,在命令中附加-g--global),它將當前包上下文作為全局包卸載。

npm uninstall 有3個可選參數,用于保存或更新主 package.json 中的包版本:

  • -S, --save:包將被添加到 dependencies

  • -D, --save-dev:包將被添加到 devDependencies

  • -O, --save-optional:包將被添加到 optionalDependencies

例:

npm uninstall sax
npm uninstall sax --save
npm uninstall @myorg/privatepackage --save
npm uninstall node-tap --save-dev
npm uninstall dtrace-provider --save-optional

npm update

npm update 用于更新本地安裝的模塊。

命令格式

npm update [-g] [<pkg>...]

aliases: up, upgrade

說明

注:從npm@2.6.1開始,npm update 僅更新頂級包。舊版本的 npm 會遞歸檢查所有的依賴。如果要達到舊版本的行為,請使用npm --depth 9999 update

npm config

npm config 命令用于管理配置文件。

命令格式

npm config set <key> <value> [-g|--global]
npm config get <key>
npm config delete <key>
npm config list
npm config edit
npm get <key>
npm set <key> <value> [-g|--global]

aliases: c

說明

  • npm config set <key> <value> [-g|--global] : 設置一個配置參數。

    例:

    npm config set foo:port 80
    
  • npm config get <key> :獲取一個配置參數。

    例:

    npm config get foo:port
    
  • npm config delete <key> :刪除一個配置參數。

    例:

    npm config delete foo:port
    
  • npm config list :打印配置參數列表。

  • npm config edit :直接編輯配置文件。

  • npm get <key>npm config get <key> 的簡寫。

  • npm set <key> <value> [-g|--global]npm config set <key> <value> [-g|--global] 的簡寫。

npm publish

npm publish 用于發布一個包。

命令格式

npm publish [<tarball>|<folder>] [--tag <tag>] [--access <public|restricted>]

Publishes '.' if no argument supplied
Sets tag 'latest' if no --tag specified

說明

將包發布到注冊表,以便可以按名稱安裝。如果沒有本地 .gitignore.npmignore 文件,則包括軟件包目錄中的所有文件。如果這兩個過濾文件都存在時,某個文件被 .gitignore 忽略,而不被 .npmignore 忽略,則它將被包括。

npm run

如果在 package.json 文件中的 scripts 字段定義了命令,就可以使用 npm run 來執行腳本命令。

例:

假設 package.json 文件中的 scripts 字段如下定義:

"scripts": {
    "test": "mocha",
    "lint": "eslint lib bin hot scripts",
    "prepublish": "npm run test && npm run lint",
    "start": "node index.js"
}

npm run test :相當于執行 mocha 命令。它會開始執行測試框架 Mocha 。

npm run lint :相當于執行 eslint lib bin hot scripts 命令。它會開始執行 eslint 檢查。

npm run prepublish :相當于執行 npm run testnpm run lint 兩條命令。現在你了解如何復合命令了吧。

npm start :相當于執行 node index.js 。Node.js 啟動一個服務的入口腳本。

參考

npm 官方文檔

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,202評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,297評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,688評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,875評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,438評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,183評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,384評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,612評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評論 1 292
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,093評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,330評論 2 377

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,816評論 18 139
  • 什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 ...
    ihoey閱讀 6,261評論 2 36
  • npm是什么 NPM的全稱是Node Package Manager,是隨同NodeJS一起安裝的包管理和分發工具...
    build1024閱讀 7,930評論 0 9
  • 描述 npm從以下來源獲取配置值,按優先級排序: 命令行標記 在命令行上放置--foo bar設置foo配置參數為...
    竹天亮閱讀 44,201評論 0 8
  • 2017.3.20 - 2017.3.31 筆記索引 mongodb數據庫去重 日期數組編造 同步查詢代碼編寫ht...
    ccminn閱讀 724評論 0 3