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