柚子快報(bào)邀請(qǐng)碼778899分享:npm 超詳細(xì)使用教程
柚子快報(bào)邀請(qǐng)碼778899分享:npm 超詳細(xì)使用教程
文章目錄
一、簡(jiǎn)介二、npm安裝三、npm 的使用3.1 npm初始化項(xiàng)目3.2 安裝包3.3 安裝不同版本包3.4 避免系統(tǒng)權(quán)限3.5 更新包3.6 卸載包3.7 執(zhí)行腳本3.8 pre- 和 post- 腳本3.9 npm link3.10 發(fā)布和卸載發(fā)布的包3.11 使用npm版本控制3.22 npm資源
四、總結(jié)
一、簡(jiǎn)介
npm,全名 node package manger。 npm 是Node的開放式模塊登記和管理系統(tǒng),是Node.js包的標(biāo)準(zhǔn)發(fā)布平臺(tái),用于Node.js包的發(fā)布、傳播、依賴控制,網(wǎng)址:https://www.npmjs.com/ npm 提供了命令行工具,可以方便地下載、安裝、升級(jí)、刪除包,也可以讓你作為開發(fā)者發(fā)布并維護(hù)包。 在本文中,我們將深入探討npm的各個(gè)方面,從安裝到高級(jí)用法,幫助讀者從入門到精通npm的使用。
二、npm安裝
npm 在按照 Node.js 時(shí)會(huì)連帶被安裝。但有可能不是最新版本,需要 npm install npm@latest -g 升級(jí)到最新版本。 命令:
# 查看 npm 命令列表
$ npm help
# 查看各個(gè)命令的簡(jiǎn)單用法
$ npm -l
# 查看 npm 的版本
$ npm -v
# 查看 npm 的配置
$ npm config list -l
三、npm 的使用
3.1 npm初始化項(xiàng)目
npm init 初始化 package.json 文件,用來初始化生成package.json文件。在這個(gè)過程中會(huì)向用戶提問一系列問題,如果你覺得不用修改默認(rèn)配置,一路回車就可以了。 如果使用了-f(代表force)、-y(代表yes),則跳過提問階段,直接生成一個(gè)新的package.json文件。 npm set 設(shè)置環(huán)境變量:
$ npm set init-author-name 'Your name'
$ npm set init-author-email 'Your email'
$ npm set init-author-url 'http://****.com'
$ npm set init-license 'MIT'
上面命令等于為npm init設(shè)置了默認(rèn)值,以后執(zhí)行npm init的時(shí)候,package.json的作者姓名、郵件、主頁、許可證字段就會(huì)自動(dòng)寫入預(yù)設(shè)的值。這些信息會(huì)存放在用戶主目錄的~/.npmrc文件,使得用戶不用每個(gè)項(xiàng)目都輸入。如果某個(gè)項(xiàng)目有不同的設(shè)置,可以針對(duì)該項(xiàng)目運(yùn)行npm config。
$ npm set save-exact true
上面命令設(shè)置加入模塊時(shí),package.json將記錄模塊的確切版本,而不是一個(gè)可選的版本范圍。 npm config:
$ npm config set prefix $dir
上面的命令將指定的$dir目錄,設(shè)為模塊的全局安裝目錄。如果當(dāng)前有這個(gè)目錄的寫權(quán)限,那么運(yùn)行npm install的時(shí)候,就不再需要sudo命令授權(quán)了。
$ npm config set save-prefix ~
上面的命令使得npm install --save和npm install --save-dev安裝新模塊時(shí),允許的版本范圍從克拉符號(hào)(^)改成波浪號(hào)(~),即從允許小版本升級(jí),變成只允許補(bǔ)丁包的升級(jí)。
$ npm config set init.author.name $name
$ npm config set init.author.email $email
上面命令指定使用npm init時(shí),生成的package.json文件的字段默認(rèn)值。 npm info: npm info命令可以查看每個(gè)模塊的具體信息
$ npm info underscore
$ npm info underscore description
$ npm info underscore homepage
$ npm info underscore version
npm search: npm search命令用于搜索npm倉庫,它后面可以跟字符串,也可以跟正則表達(dá)式
$ npm search <搜索詞>
npm list npm list命令以樹型結(jié)構(gòu)列出當(dāng)前項(xiàng)目安裝的所有模塊,以及它們依賴的模塊。
npm list
npm list -global
npm list vue
加上global參數(shù),會(huì)列出全局安裝的模塊。
3.2 安裝包
Node模塊采用npm install命令安裝。
每個(gè)模塊可以“全局安裝”,也可以“本地安裝”?!叭职惭b”指的是將一個(gè)模塊安裝到系統(tǒng)目錄中,各個(gè)項(xiàng)目都可以調(diào)用。一般來說,全局安裝只適用于工具模塊,比如eslint和gulp。“本地安裝”指的是將一個(gè)模塊下載到當(dāng)前項(xiàng)目的node_modules子目錄,然后只有在項(xiàng)目目錄之中,才能調(diào)用這個(gè)模塊
本地安裝
$ npm install
全局安裝
$ sudo npm install -global
$ sudo npm install -g
也支持直接輸入Github代碼庫地址
$ npm install git://github.com/package/path.git
$ npm install git://github.com/package/path.git#0.1.0
強(qiáng)制重新安裝
$ npm install
如果你希望,所有模塊都要強(qiáng)制重新安裝,那就刪除node_modules目錄,重新執(zhí)行npm install
$ rm -rf node_modules
$ npm install
3.3 安裝不同版本包
install 命令總是安裝模塊的最新版本,如果要安裝模塊的特定版本,可以在模塊名后面加上@和版本號(hào)。
$ npm install sax@latest
$ npm install sax@0.1.1
$ npm install sax@">=0.1.0 <0.2.0"
# 如果使用--save-exact參數(shù),會(huì)在package.json文件指定安裝模塊的確切版本
$ npm install readable-stream --save --save-exact
$ npm install sax --save
$ npm install node-tap --save-dev
# 或者
$ npm install sax -S
$ npm install node-tap -D
# 如果要安裝beta版本的模塊,需要使用下面的命令
# 安裝最新的beta版
$ npm install
# 安裝指定的beta版
$ npm install
# npm install默認(rèn)會(huì)安裝dependencies字段和devDependencies字段中的所有模塊,如果使用--production參數(shù),可以只安裝dependencies字段的模塊
$ npm install --production
# 或者
$ NODE_ENV=production npm install
3.4 避免系統(tǒng)權(quán)限
默認(rèn)情況下,Npm全局模塊都安裝在系統(tǒng)目錄(比如/usr/local/lib/),普通用戶沒有寫入權(quán)限,需要用到sudo命令。這不是很方便,我們可以在沒有root權(quán)限的情況下,安裝全局模塊。 首先,在主目錄下新建配置文件.npmrc,然后在該文件中將prefix變量定義到主目錄下面。
prefix = /home/yourUsername/npm
然后在主目錄下新建npm子目錄
$ mkdir ~/npm
此后,全局安裝的模塊都會(huì)安裝在這個(gè)子目錄中,npm也會(huì)到~/npm/bin目錄去尋找命令。 最后,將這個(gè)路徑在.bash_profile文件(或.bashrc文件)中加入PATH變量。
export PATH=~/npm/bin:$PATH
3.5 更新包
npm update命令可以更新本地安裝的模塊
# 升級(jí)當(dāng)前項(xiàng)目的指定模塊
$ npm update [package name]
# 升級(jí)全局安裝的模塊
$ npm update -global [package name]
它會(huì)先到遠(yuǎn)程倉庫查詢最新版本,然后查詢本地版本。如果本地版本不存在,或者遠(yuǎn)程版本較新,就會(huì)安裝。 使用-S或–save參數(shù),可以在安裝的時(shí)候更新package.json里面模塊的版本號(hào)。 注意,從npm v2.6.1開始,npm update只更新頂層模塊,而不更新依賴的依賴,以前版本是遞歸更新的。如果想取到老版本的效果,要使用下面的命令。
$ npm --depth 9999 update
3.6 卸載包
npm uninstall命令,卸載已安裝的模塊
$ npm uninstall [package name]
# 卸載全局模塊
$ npm uninstall [package name] -global
3.7 執(zhí)行腳本
npm run npm 不僅可以用于模塊管理,還可以用于執(zhí)行腳本。package.json 文件有一個(gè) scripts 字段,可以用于指定腳本命令,供npm直接調(diào)用。 npm run 命令會(huì)自動(dòng)在環(huán)境變量 $PATH 添加 node_modules/.bin 目錄,所以 scripts 字段里面調(diào)用命令時(shí)不用加上路徑,這就避免了全局安裝 NPM 模塊。 npm run 如果不加任何參數(shù),直接運(yùn)行,會(huì)列出 package.json 里面所有可以執(zhí)行的腳本命令。 npm內(nèi)置了兩個(gè)命令簡(jiǎn)寫,npm test 等同于執(zhí)行 npm run test,npm start 等同于執(zhí)行 npm run start。
$ npm i eslint --save-dev
3.8 pre- 和 post- 腳本
npm run 為每條命令提供了 pre- 和 post- 兩個(gè)鉤子(hook)。以 npm run lint 為例,執(zhí)行這條命令之前,npm會(huì)先查看有沒有定義 prelint 和 postlint 兩個(gè)鉤子,如果有的話,就會(huì)先執(zhí)行 npm run prelint,然后執(zhí)行 npm run lint,最后執(zhí)行npm run postlint。
3.9 npm link
就是將當(dāng)前的目錄臨時(shí)的放到全局下。 開發(fā) NPM 模塊的時(shí)候,有時(shí)我們會(huì)希望,邊開發(fā)邊試用,比如本地調(diào)試的時(shí)候,require(‘myModule’) 會(huì)自動(dòng)加載本機(jī)開發(fā)中的模塊。Node規(guī)定,使用一個(gè)模塊時(shí),需要將其安裝到全局的或項(xiàng)目的 node_modules 目錄之中。對(duì)于開發(fā)中的模塊,解決方法就是在全局的 node_modules 目錄之中,生成一個(gè)符號(hào)鏈接,指向模塊的本地目錄。 npm link 就能起到這個(gè)作用,會(huì)自動(dòng)建立這個(gè)符號(hào)鏈接。 請(qǐng)?jiān)O(shè)想這樣一個(gè)場(chǎng)景,你開發(fā)了一個(gè)模塊 myModule,目錄為 src/myModule,你自己的項(xiàng)目 myProject 要用到這個(gè)模塊,項(xiàng)目目錄為 src/myProject。首先,在模塊目錄(src/myModule)下運(yùn)行 npm link 命令。
src/myModule$ npm link
上面的命令會(huì)在NPM的全局模塊目錄內(nèi),生成一個(gè)符號(hào)鏈接文件,該文件的名字就是 package.json 文件中指定的模塊名。
/path/to/global/node_modules/myModule -> src/myModule
這個(gè)時(shí)候,已經(jīng)可以全局調(diào)用 myModule 模塊了。但是,如果我們要讓這個(gè)模塊安裝在項(xiàng)目?jī)?nèi),還要進(jìn)行下面的步驟。 切換到項(xiàng)目目錄,再次運(yùn)行 npm link 命令,并指定模塊名。
src/myProject$ npm link myModule
上面命令等同于生成了本地模塊的符號(hào)鏈接。
src/myProject/node_modules/myModule -> /path/to/global/node_modules/myModule
然后,就可以在你的項(xiàng)目中,加載該模塊了。
var myModule = require('myModule');
這樣一來,myModule 的任何變化,都可以直接反映在 myProject 項(xiàng)目之中。但是,這樣也出現(xiàn)了風(fēng)險(xiǎn),任何在myProject目錄中對(duì)myModule的修改,都會(huì)反映到模塊的源碼中。 如果你的項(xiàng)目不再需要該模塊,可以在項(xiàng)目目錄內(nèi)使用 npm unlink 命令,刪除符號(hào)鏈接。
src/myProject$ npm unlink myModule
3.10 發(fā)布和卸載發(fā)布的包
npm publish用于將當(dāng)前模塊發(fā)布到http://npmjs.com。執(zhí)行之前,需要向http://npmjs.com申請(qǐng)用戶名。
# 需要向npmjs.com申請(qǐng)用戶名
$ npm adduser
# 登錄
$ npm login
# 發(fā)布
$ npm publish
# 如果當(dāng)前模塊是一個(gè)beta版,比如1.3.1-beta.3,那么發(fā)布的時(shí)候需要使用tag參數(shù),將其發(fā)布到指定標(biāo)簽,默認(rèn)的發(fā)布標(biāo)簽是latest
$ npm publish --tag beta
# 如果發(fā)布私有模塊,模塊初始化的時(shí)候,需要加上scope參數(shù)。只有npm的付費(fèi)用戶才能發(fā)布私有模塊。
$ npm init --scope=
# 如果你的模塊是用ES6寫的,那么發(fā)布的時(shí)候,最好轉(zhuǎn)成ES5。首先,需要安裝Babel。
$ npm install --save-dev babel-cli@6 babel-preset-es2015@6
然后,在package.json里面寫入build腳本。
"scripts": {
"build": "babel source --presets babel-preset-es2015 --out-dir distribution",
"prepublish": "npm run build"
}
運(yùn)行上面的腳本,會(huì)將 source 目錄里面的ES6源碼文件,轉(zhuǎn)為 distribution 目錄里面的 ES5 源碼文件。然后,在項(xiàng)目根目錄下面創(chuàng)建兩個(gè)文件 .npmignore 和 .gitignore,分別寫入以下內(nèi)容。
// .npmignore
source
// .gitignore
node_modules
distribution
npm deprecate
如果想廢棄某個(gè)版本的模塊,可以使用 npm deprecate 命令。
$ npm deprecate my-thing@"< 0.2.3" "critical bug fixed in v0.2.3"
3.11 使用npm版本控制
npm內(nèi)置了版本控制功能,允許你通過簡(jiǎn)單的命令來更新項(xiàng)目的版本號(hào)。這有助于在發(fā)布新版本時(shí)跟蹤和管理項(xiàng)目的版本。 你可以使用以下命令來更新版本號(hào): npm version patch:將版本號(hào)中的補(bǔ)丁級(jí)別加1(例如,從1.0.0到1.0.1)。 npm version minor:將版本號(hào)中的次要級(jí)別加1,并將補(bǔ)丁級(jí)別重置為0(例如,從1.0.0到1.1.0)。 npm version major:將版本號(hào)中的主級(jí)別加1,并將次要級(jí)別和補(bǔ)丁級(jí)別重置為0(例如,從1.0.0到2.0.0)。 npm會(huì)自動(dòng)更新package.json中的版本號(hào),并提交一個(gè)新的git commit和tag。
3.22 npm資源
npm官網(wǎng):查找和發(fā)布npm包的平臺(tái)。 npm文檔:npm的官方文檔,包含各種命令和功能的詳細(xì)說明。 npm博客:了解npm的最新動(dòng)態(tài)、教程和最佳實(shí)踐
四、總結(jié)
npm是Node.js生態(tài)系統(tǒng)中不可或缺的一部分,它提供了強(qiáng)大的依賴管理和包發(fā)布功能。通過掌握npm的基礎(chǔ)用法和技巧,你可以更加高效地使用npm來加速項(xiàng)目的開發(fā)過程,并與其他開發(fā)者和工具進(jìn)行無縫集成。
柚子快報(bào)邀請(qǐng)碼778899分享:npm 超詳細(xì)使用教程
推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。