若是你是一個JavaScript系的開發者,必定不會陌生NPM,它既是一個平臺,也是一個工具。在這個平臺上,咱們可以使用其餘開發者提供的功能代碼,固然咱們也能將咱們本身代碼提交到這裏分享給世界上的開發者。node
如下記錄一些NPM做爲工具的一些使用技巧。git
npmrc
.npmrc 作爲npm的配置文件,它能夠定義在多個地方。github
用戶根目錄,根目錄內全部的npm指令都會查詢到該配置web
npm內建配置文件npm
當前項目根目錄,用於配置特定於當前項目的配置json
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
中而且讓版本號固定。服務器
一些國內的服務器在拉取某些被牆的包的常常會失敗或者速度很慢,這個時候咱們能夠試試淘寶NPM鏡像(這是一個完整 npmjs.org 鏡像,你能夠用此代替官方版本(只讀),同步頻率目前爲 10分鐘 一次以保證儘可能與官方服務同步)。官方還定製了cnpm,這個看具體狀況而定了。好比,我曾經的一個項目,部署在微軟的Asure上面,這個服務器感受被牆的厲害,用官方的npm庫下phantomjs的zip文件運氣好的話也得下個兩三次才能下下來,後來爲了解決這個問題嘗試了淘寶鏡像,不過問題就出在用了cnpm,用cnpm拉的包在本地編譯不了,後來換回npm,使用淘寶鏡像,一切正常了~工具
package.json
package.json
是項目的配置管理文件,它定義了這個項目所須要的各個依賴模塊以及項目的配置信息(名字,版本號,許可證等)。一個最基本的package.json
必須有name
和version
,差很少長這樣:post
{
"name": "xxx",
"version": 0.0.0
}
咱們能夠經過npm init
指令初始化建立一個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命令縮寫,經過這些命令咱們能夠方便的啓動項目、進行測試或者拿到一些鉤子來作某些指令前預先作的事,
"scripts": {
"pretest": "echo \"this is pre test\" ",
"test": "echo \"Error: no test specified\"",
"posttest": "echo \"this is post test\""
}
當咱們執行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
指令是一個預執行指令,postxx
是一個後置指令,他倆都和xx
指令強相關。
main
main
指定項目加載的入口文件,默認是根目錄的inde.js
file
file
是一個字符串的數組,指定咱們發佈的包應該包含當前目錄的哪些文件,這個在咱們發佈包的時候頗有用,由於開發包裏面的文件夾不是都須要發佈出去的。固然一下文件是始終會被包含進去的,不論咱們是否設置,
- package.json
- README
- CHANGES / CHANGELOG / HISTORY
- LICENSE / LICENCE
- NOTICE
- The file in the "main" field
keywords
keywords
指定了在庫中搜索時可以被哪些關鍵字搜索到,因此通常這個會多寫一些項目相關的詞在這裏,這是一個字符串的數組。
其他屬性詳情能夠查詢官方文檔
semantic version
關於語義化的版本號,這裏很少講,放一些preference
Nodejs項目中最多見的一些版本標識( *, ~, ^ ),常常忘了它們的含義,這裏記錄一下:
*
任意版本
1.0.0
安裝指定的1.0.0版本
lodash: 4.7.0 會安裝準確的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
如何發佈一個包?
npm addUser
按照提示輸入帳號密碼,建立一個npm的帳號,若是已有帳號直接到下一步
npm whoami
查看當前用戶,確認是使用當前用戶來發布包
npm publish
而後就能夠直接發佈了,固然這個時候可能會出現各類問題,好比你的包和別人的重名了,或者當前的包的版本號已經發布過了等等
說到發佈包,這裏在記錄一些開發包的小技巧。
咱們在開發包的時候免不了一些調試,可是這些調試的過程咱們並不想它發佈又想確保當前的功能是可用的,這個時候有兩個辦法可以幫助咱們來解決這個問題。
關於npm link
的詳細介紹咱們能夠看官網,這裏介紹三種用法:
- 直接在咱們開發包的主目錄下直接使用,這個時候,至關於咱們在npm global的目錄下符號連接了當前包。
npm link package-name
, 做用至關於把一個全局安裝的包link到了咱們當前目錄下node_module中。
- 在
package.json
文件的dependencies中使用以下方式聲明,而後就如同使用一個已經正常發佈的包同樣安裝使用就行。
"dependencies": {
"bar": "file:../foo/bar"
}
ps: 繼續努力啊,如風少年~