如果你是一個JavaScript系的開發(fā)者,一定不會陌生NPM浇雹,它既是一個平臺沉御,也是一個工具。在這個平臺上昭灵,我們能夠使用其他開發(fā)者提供的功能代碼吠裆,當(dāng)然我們也能將我們自己代碼提交到這里分享給世界上的開發(fā)者。
以下記錄一些NPM作為工具的一些使用技巧烂完。
npmrc
.npmrc 做為npm的配置文件试疙,它可以定義在多個地方。
- ~/.npmrc
用戶根目錄抠蚣,根目錄內(nèi)所有的npm指令都會查詢到該配置
- /path/to/npm/npmrc
npm內(nèi)建配置文件
- ./.npmrc
當(dāng)前項目根目錄祝旷,用于配置特定于當(dāng)前項目的配置
npmrc對我們來說十分有用,我們可以配置例如username嘶窄、registry怀跛、email等信息。 eg:
save=true
save-exact=true
email=wfsovereign@outlook.com
username=wfsovereign
registry=https://registry.npm.taobao.org
npm最讓人頭疼的問題之一就是版本號了柄冲,這里配置了save和save-exact屬性吻谋,作用是讓我們 npm install
指令安裝的依賴自動保存在package.json
文件的dependencies
中并且讓版本號固定。
一些國內(nèi)的服務(wù)器在拉取某些被墻的包的經(jīng)常會失敗或者速度很慢现横,這個時候我們可以試試淘寶NPM鏡像(這是一個完整 npmjs.org 鏡像漓拾,你可以用此代替官方版本(只讀),同步頻率目前為 10分鐘 一次以保證盡量與官方服務(wù)同步)戒祠。官方還定制了cnpm骇两,這個看具體情況而定了。比如姜盈,我曾經(jīng)的一個項目脯颜,部署在微軟的Asure上面,這個服務(wù)器感覺被墻的厲害贩据,用官方的npm庫下phantomjs的zip文件運氣好的話也得下個兩三次才能下下來,后來為了解決這個問題嘗試了淘寶鏡像闸餐,不過問題就出在用了cnpm饱亮,用cnpm拉的包在本地編譯不了,后來換回npm舍沙,使用淘寶鏡像近上,一切正常了~
package.json
package.json
是項目的配置管理文件,它定義了這個項目所需要的各個依賴模塊以及項目的配置信息(名字拂铡,版本號壹无,許可證等)葱绒。一個最基本的package.json
必須有name
和version
,差不多長這樣:
{
"name": "xxx",
"version": 0.0.0
}
我們可以通過npm init
指令初始化創(chuàng)建一個package.json文件斗锭,
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "wfsovereign",
"license": "ISC",
"devDependencies": {
},
"dependencies": {
}
}
下面分屬性介紹
scripts
scripts
定義了一些腳本指令的npm命令縮寫地淀,通過這些命令我們可以方便的啟動項目、進(jìn)行測試或者拿到一些鉤子來做某些指令前預(yù)先做的事岖是,
"scripts": {
"pretest": "echo \"this is pre test\" ",
"test": "echo \"Error: no test specified\"",
"posttest": "echo \"this is post test\""
}
當(dāng)我們執(zhí)行npm test
會得到如下輸出:
this is pre test
test@1.0.0 test
echo "Error: no test specified"
Error: no test specified
test@1.0.0 posttest
echo "this is post test"
this is post test
通過如上實驗帮毁,我們能夠知道,prexx
指令是一個預(yù)執(zhí)行指令豺撑,postxx
是一個后置指令烈疚,他倆都和xx
指令強(qiáng)相關(guān)。
main
main
指定項目加載的入口文件聪轿,默認(rèn)是根目錄的inde.js
file
file
是一個字符串的數(shù)組爷肝,指定我們發(fā)布的包應(yīng)該包含當(dāng)前目錄的哪些文件,這個在我們發(fā)布包的時候很有用陆错,因為開發(fā)包里面的文件夾不是都需要發(fā)布出去的灯抛。當(dāng)然一下文件是始終會被包含進(jìn)去的,不論我們是否設(shè)置危号,
- package.json
- README
- CHANGES / CHANGELOG / HISTORY
- LICENSE / LICENCE
- NOTICE
- The file in the "main" field
keywords
keywords
指定了在庫中搜索時能夠被哪些關(guān)鍵字搜索到牧愁,所以一般這個會多寫一些項目相關(guān)的詞在這里,這是一個字符串的數(shù)組外莲。
其余屬性詳情可以查詢官方文檔
semantic version
關(guān)于語義化的版本號猪半,這里不多講,放一些preference
Nodejs項目中最常見的一些版本標(biāo)識( *, ~, ^ )偷线,經(jīng)常忘了它們的含義磨确,這里記錄一下:
-
*
任意版本 -
1.0.0
安裝指定的1.0.0版本
lodash: 4.7.0 會安裝準(zhǔn)確的4.7.0到我們的node_module目錄
-
~1.0.0
安裝 >= 1.0.0 小于 1.(0 + 1).0的最新版本 -
^1.0.0
安裝 >= 1.0.0 小于 (1 + 1).0.0的最新版本
package publish
如何發(fā)布一個包?
-
npm addUser
按照提示輸入賬號密碼声邦,創(chuàng)建一個npm的賬號乏奥,如果已有賬號直接到下一步 -
npm whoami
查看當(dāng)前用戶,確認(rèn)是使用當(dāng)前用戶來發(fā)布包 -
npm publish
然后就可以直接發(fā)布了亥曹,當(dāng)然這個時候可能會出現(xiàn)各種問題邓了,比如你的包和別人的重名了,或者當(dāng)前的包的版本號已經(jīng)發(fā)布過了等等
說到發(fā)布包媳瞪,這里在記錄一些開發(fā)包的小技巧骗炉。
我們在開發(fā)包的時候免不了一些調(diào)試,但是這些調(diào)試的過程我們并不想它發(fā)布又想確保當(dāng)前的功能是可用的蛇受,這個時候有兩個辦法能夠幫助我們來解決這個問題句葵。
npm link
關(guān)于npm link
的詳細(xì)介紹我們可以看官網(wǎng),這里介紹三種用法:
- 直接在我們開發(fā)包的主目錄下直接使用,這個時候乍丈,相當(dāng)于我們在npm global的目錄下符號鏈接了當(dāng)前包剂碴。
-
npm link package-name
, 作用相當(dāng)于把一個全局安裝的包link到了我們當(dāng)前目錄下node_module中轻专。 - 在
package.json
文件的dependencies中使用如下方式聲明忆矛,然后就如同使用一個已經(jīng)正常發(fā)布的包一樣安裝使用就行。
"dependencies": {
"bar": "file:../foo/bar"
}
ps: 繼續(xù)努力啊铭若,如風(fēng)少年~