NPM使用技巧

如果你是一個JavaScript系的開發者,一定不會陌生NPM,它既是一個平臺,也是一個工具。在這個平臺上,我們能夠使用其他開發者提供的功能代碼,當然我們也能將我們自己代碼提交到這里分享給世界上的開發者。

以下記錄一些NPM作為工具的一些使用技巧。

npmrc

.npmrc 做為npm的配置文件,它可以定義在多個地方。

  • ~/.npmrc

用戶根目錄,根目錄內所有的npm指令都會查詢到該配置

  • /path/to/npm/npmrc

npm內建配置文件

  • ./.npmrc

當前項目根目錄,用于配置特定于當前項目的配置

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必須有nameversion,差不多長這樣:

{
    "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

如何發布一個包?

  1. npm addUser 按照提示輸入賬號密碼,創建一個npm的賬號,如果已有賬號直接到下一步
  2. npm whoami 查看當前用戶,確認是使用當前用戶來發布包
  3. npm publish 然后就可以直接發布了,當然這個時候可能會出現各種問題,比如你的包和別人的重名了,或者當前的包的版本號已經發布過了等等

說到發布包,這里在記錄一些開發包的小技巧。

我們在開發包的時候免不了一些調試,但是這些調試的過程我們并不想它發布又想確保當前的功能是可用的,這個時候有兩個辦法能夠幫助我們來解決這個問題。

  • npm link

關于npm link的詳細介紹我們可以看官網,這里介紹三種用法:

  1. 直接在我們開發包的主目錄下直接使用,這個時候,相當于我們在npm global的目錄下符號鏈接了當前包。
  2. npm link package-name, 作用相當于把一個全局安裝的包link到了我們當前目錄下node_module中。
  3. package.json文件的dependencies中使用如下方式聲明,然后就如同使用一個已經正常發布的包一樣安裝使用就行。
"dependencies": {
    "bar": "file:../foo/bar"
  }

ps: 繼續努力啊,如風少年~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,890評論 18 139
  • 國內可以使用淘寶鏡像的 cnpm mac系統使用-g全局安裝的時候,需要在前面加 sudo npm xxxx下面示...
    奔跑在春風里閱讀 292評論 0 0
  • 什么是 NPM npm之于Node,就像pip之于Python,gem之于Ruby,composer之于PHP。 ...
    ihoey閱讀 6,264評論 2 36
  • 描述 npm從以下來源獲取配置值,按優先級排序: 命令行標記 在命令行上放置--foo bar設置foo配置參數為...
    竹天亮閱讀 44,223評論 0 8
  • 各位觀眾老爺大家好,歡迎大家收看由我給大家講解的web前端大講堂,今天給大家分享的是一個關于數據圖顯示的插件。那就...
    5034af144007閱讀 420評論 0 1