npm是什么?
npm
是node.js
的一個(gè)包管理工具姆泻,方便的使用第三方庫(kù)零酪,無(wú)需每次新建一個(gè)項(xiàng)目而導(dǎo)入第三方JS庫(kù),使用npm
拇勃,只需執(zhí)行簡(jiǎn)單的命令就可以添加依賴庫(kù)了四苇。跟iOS中的Cocoapods
一樣,都是為了方便管理包的方咆。npm
主要有以下幾種使用場(chǎng)景:
- 允許用戶從NPM服務(wù)器下載別人編寫的第三方包到本地使用月腋。
- 允許用戶從NPM服務(wù)器下載并安裝別人編寫的命令行程序到本地使用。
- 允許用戶將自己編寫的包或命令行程序上傳到NPM服務(wù)器供別人使用瓣赂。
npm使用
使用npm前需要先進(jìn)行安裝node.js
,可以去官網(wǎng)進(jìn)行下載安裝榆骚,安裝完成后,可以在終端使用npm -v
命令查看node.js
的版本號(hào)煌集。
npm初始化
使用npm
進(jìn)行安裝包進(jìn)妓肢,首先需要在項(xiàng)目中進(jìn)行npm
初始化,創(chuàng)建一個(gè)package.json
的文件苫纤。在終端執(zhí)行npm init
,輸入命令后碉钠,然后一步一步進(jìn)行設(shè)置,主要是設(shè)置項(xiàng)目名
卷拘,版本號(hào)
喊废,項(xiàng)目描述
,入口文件
栗弟,測(cè)試命令
污筷,git倉(cāng)庫(kù)地址
,關(guān)鍵字
乍赫,作者
颓屑,license
等信息,初始化完成后耿焊,創(chuàng)建的package.json
如下所示:
{
"name": "webpack",
"version": "1.0.0",
"description": "webpack demo",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
本地安裝
npm
初始化完成后揪惦,可以進(jìn)行安裝了,比如需要在項(xiàng)目本地安裝 webpack
罗侯,執(zhí)行如下命令進(jìn)行安裝:
npm install --save-dev webpack
- 本地安裝完成后器腋,將在項(xiàng)目目錄下創(chuàng)建一個(gè)
node_modules
的目錄,如下所示:
- 安裝完成后钩杰,還將在
package.json
中的devDependencies
節(jié)點(diǎn)下添加包名
和對(duì)應(yīng)的版本號(hào)
纫塌。
"devDependencies": {
"webpack": "^4.41.5"
}
- 安裝完成后,可以通過(guò)
require()
來(lái)引入本地安裝的包讲弄。
全局安裝
使用全局安裝命令措左,可以將依賴包安裝在/usr/local
下或者 node
的安裝目錄。全局安裝的命令如下所示:
npm install --g webpack
- 全局安裝完成后避除,可以直接在命令行里使用怎披。
卸載模塊
使用以下命令胸嘁,可以卸載模塊
$ npm uninstall webpack
更新模塊
使用以下命令,可以更新模塊
$ npm update webpack
搜索模塊
使用以下命令凉逛,可以搜索模塊
$ npm search webpack
package.json
介紹完基本的命令后性宏,就來(lái)熟悉下package.json
文件,該文件主要用于記錄項(xiàng)目中所用到的模塊状飞,當(dāng)我們從代碼倉(cāng)庫(kù)中拉取一個(gè)項(xiàng)目后毫胜,執(zhí)行npm install
命令時(shí),將自動(dòng)讀取package.json
文件中所有dependencies信息诬辈,然后根據(jù)dependencies中的信息與node_modules中的模塊進(jìn)行對(duì)比酵使,沒(méi)有的直接下載,已有的將根據(jù)對(duì)應(yīng)的版本號(hào)進(jìn)行檢查更新焙糟。執(zhí)行完npm install
命令后凝化,如果項(xiàng)目中沒(méi)有package-lock.json
文件,將生成一個(gè)package-lock.json
文件。
package-lock.json
package-lock.json
文件用于記錄當(dāng)前狀態(tài)下實(shí)際安裝的各個(gè)模塊的具體來(lái)源和版本號(hào)酬荞。如果換了一臺(tái)機(jī)器搓劫,執(zhí)行npm install
命令時(shí),將根據(jù)package-lock.json
中模塊的版本號(hào)和來(lái)源進(jìn)行安裝混巧,使各機(jī)器上安裝的模塊版本號(hào)保持一致枪向。
package.json 屬性說(shuō)明
- name - 包名。
- version - 包的版本號(hào)咧党。
- description - 包的描述秘蛔。
- homepage - 包的官網(wǎng) url 。
- author - 包的作者姓名傍衡。
- contributors - 包的其他貢獻(xiàn)者姓名深员。
- dependencies - 項(xiàng)目在生產(chǎn)環(huán)境中依賴的包-install的東西。
- repository - 包代碼存放的地方的類型蛙埂,可以是 git 或 svn倦畅,git 可在 Github 上。
- main - main 字段指定了程序的主入口文件绣的,require('moduleName') 就會(huì)加載這個(gè)文件叠赐。這個(gè)字段的默認(rèn)值是模塊根目錄下面的 index.js。
- keywords - 關(guān)鍵字
- devDependencies 項(xiàng)目在開(kāi)發(fā)和測(cè)試環(huán)境中依賴的包
- scripts 用于配置命令信息屡江,拿到一個(gè)項(xiàng)目芭概,不知道執(zhí)行什么 命令時(shí),可以查看scripts中配置的命令惩嘉。
dependencies 與 devDependencies 區(qū)別
-
概念區(qū)別
dependencies
:包含開(kāi)發(fā)環(huán)境和測(cè)試環(huán)境都會(huì)用到的依賴包罢洲。即是我們生產(chǎn)環(huán)境和開(kāi)發(fā)環(huán)境中都需要的依賴項(xiàng)。比如我們代碼中需要使用的一些第三方庫(kù)文黎,都將放在dependencies
中惹苗。比如我們開(kāi)發(fā)用到的vue
,react
等框架殿较。
devDependencies:包含僅在測(cè)試環(huán)境中會(huì)用到的包。是我們開(kāi)發(fā)時(shí)用的依賴項(xiàng)鸽粉,主要是一些測(cè)試工具、打包工具抓艳、編譯工具触机,比如
webpack,
babel玷或,
sass`等儡首。 -
命令區(qū)別
–save
:把依賴包名稱添加到package.json文件dependencies中
–save-dev
:把依賴包名稱添加到package.json文件devDependencies中
版本號(hào)介紹
先來(lái)看下package.json
文件中模塊的版本信息,比如^4.41.5
這里面的^
表示啥了偏友。
"devDependencies": {
"webpack": "^4.41.5"
}
在npm
使用語(yǔ)義版本號(hào)來(lái)管理代碼的蔬胯。語(yǔ)義版本號(hào)分為X.Y.Z三位,分別代表主版本號(hào)位他、次版本號(hào)和補(bǔ)丁版本號(hào)氛濒。當(dāng)代碼變更時(shí),版本號(hào)按以下原則更新鹅髓。
- 如果只是修復(fù)bug舞竿,需要更新Z位。
- 如果是新增了功能窿冯,但是向下兼容骗奖,需要更新Y位。
- 如果有大變動(dòng)醒串,向下不兼容执桌,需要更新X位。
版本符號(hào)
-
波浪號(hào)+指定版本:比如~4.41.5
表示安裝4.41.x
的最新版本芜赌,但不能低于4.41.5
,就是保持主版本號(hào)仰挣、次版本號(hào)不變,補(bǔ)丁版本安裝最新的缠沈。
插入號(hào) 波浪號(hào)+指定版本:比如^4.41.5
表示安裝4.x.x
的最新版本,但不能低于4.41.5
,就是保持主版本號(hào)不變椎木、次版本號(hào)和補(bǔ)丁版本安裝最新的。
個(gè)人博客