[About NPM] 看看NPM怎麼玩

​ 若是你寫js, 或者使用hexo一類的博客工具, 那麼應該不會對npm感到陌生.html

npmNode.js的包管理工具(package manager), 它的背後是Node.js的社區生態在支持. 咱們今天聊聊npm的玩兒法, 包括了經常使用的命令和參數以及在具體場景下的用法.node

前言

咱們今天只談npm, 相關的輔助工具各位能夠留言評論.git

用好help

幾乎全部的命令行工具/程序(Command Line Tool)都會有help這個命令或者--help這個參數, 沒有的要麼是程序自己就是隻供第三方調用api的, 要麼就是開發者不夠專業. 再好的程序開發出來若是目標受衆無從得知它的用法, 那麼它就等同於不存在.npm

npm的幫助功能十分優秀, 直接運行npm help或者npm --help將會獲得以下結果json

圖片描述

能夠看到, 全部的命令都已經羅列在這裏了, 若是你想知道具體某個命令的用法, 能夠直接在help後面跟上命令名稱, 或者直接執行命令, 並在後面加上--help參數api

npm help init
# or
npm init --help

區別在於, help命令會展現詳情的文檔, 也就是會調用瀏覽器打開本地的html頁面. 取決於你的npm版本, 可能須要加上-lor --long參數瀏覽器

--help參數則會顯示一份簡短的說明.能夠看到init是有兩個別名的, 分別是createinnit, 而且帶有四個參數,分別是--force -f, --yes -y --scope,這裏要注意的是-f-y分別是--force--yes的簡寫, 對應的結果是同樣的.緩存

事實上這是CLI(Command Line Interface)設計的一個通用規範. 你能夠在別的命令行程序上發現相似的用法.sass

圖片描述

npm help最厲害的地方在於, 若是你不知道具體的命令名稱, 或者只是想要知道某個知識點, 那麼它也能夠作模糊搜索, 命令的用法跟上面的相同, 好比bash

npm help scri

將會獲得

圖片描述

npm將會列舉出全部它認爲可能的條目供你查閱.

若是有興趣, 你能夠經過npm -l發現更多詳細的用法.

從項目的建立到發佈

咱們來以這個流程走一遍在開發當中會跟npm打交道的地方.

  • 初始化項目

也就是要建立一個package.json文件了,

npm init # 選擇性的使用-y|--yes參數能夠快速跳過問答, 直接建立一份默認配置

正常狀況下你就能夠開始安裝相應的依賴了.可是在有些狀況下, 你可能會有切換registry以及設置代理的煩惱. 甚至於不一樣的項目可能有不一樣的私有包位於不一樣的私有npm倉庫上. 所以設置registryproxy也是比較經常使用的命令

  • 設置registry

咱們仍是先跑一下幫助, 看看能獲得什麼信息

npm config --help

圖片描述

See! 相應的CURD操做一目瞭然, 因此咱們能夠這樣子設置代理和npm

npm config set registry https://registry.npm.taobao.org
npm config set proxy http://127.0.0.1:1080

是的, help就是這麼強大且方便, 讀到這裏, 若是你動手能力比較強, 能夠直接去實踐了(固然最好能夠讀完啦).

這裏須要說明的地方是, 設置了proxy以後, 相似node-sasselectron一類須要執行postinstall腳本的package, 下載時也將會應用這個代理設置.

  • 建立適用於工程的配置文件

你能夠直接在項目的根目錄下建立.npmrc文件, 以鍵值對的形式寫上對應的配置項, 保存以後就會在項目範圍內生效了.

registry=https://registry.npmjs.org
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/

一樣, 全局範圍內生效的.npmrc在你的用戶目錄下, 兩者都存在時, 將優先應用項目下的配置.

  • 安裝依賴

話很少說, 先跑一下help

圖片描述

install帶有的功能及參數就比較多了, 咱們一一過一遍.

首先不帶參數的時候, 就會安裝package.json內的全部依賴, 正常狀況下會將dependencies devDependencies optionalDependencies 三種種依賴類型所有安裝.(若是你想知道所有四種依賴(還有個peerDependencies)的詳細信息, 能夠經過npm help package.json查閱).

install的路徑, 能夠是包名, 本地文檔或者git地址

install帶有幾個參數, 前三個分別意味着將安裝的依賴劃分到指定的依賴類型當中. --save-exactnpm執行的升級策略有關, 這裏不作具體闡述. 最後一個你應該也猜到了它的做用, 就是隻安裝, 可是不保存依賴信息到package,json當中.

事實上, install及其餘命令所能附加的參數遠不止這裏羅列的這些, 你也能夠經過--registry參數指定這一次安裝所使用的npm源, 或者使用--no-proxy指定這一次暫時不用代理, 使用--save-exact指定按照package.json裏的版本號安裝依賴來避免惱人的自動向上更新策略等等, 這些參數是能夠累加的, 具體的用法及可用的參數能夠參考npm help install給出的文檔, 這裏只作簡單提示.

  • 開發過程常見問題

不少時候, 不少問題都是在關鍵的時候出現的. 好比你想安裝一個包的時候, 死活安裝不上來, 各類錯誤都有...這裏咱們簡單列舉幾個平時比較有可能遇到的.

  1. unexpected toekn|json|html

致使這個問題的緣由通常有兩種, 要麼, 你開了代理, 可是使用的npm源是代理服務器沒法訪問的; 要麼, 你上一次的CTRL+C致使了npm的緩存出現了問題, 你須要npm cache clean這個命令, 記得加上--force. 如同運行以後給出的提示, 咱們只建議你在走投無路的時候嘗試, 由於node_modules機制下, 緩存是比較珍貴的🙃.

  1. EPERM

基本上, 出現這個錯誤的時候錯誤信息已經告訴你是權限問題了, Unix系統下須要sudo執行, Windows NT下須要管理員身份的command prompt.

  1. 同一個項目, Jack新增的項目依賴在Lucy那裏install以後就error不斷

你多是中了semver版本策略的招, 具體的能夠經過npm help update查看詳細的升級策略, 具體的解法是, 你可讓其餘人在執行install命令的時候加上--save-exact參數.

  • 發佈

發佈的話, 除了publish, 有一個比較使用的命令, 就是whoami. 它能夠查看當前registry下登陸的用戶, 未登陸或者登陸的registry不對就會給出error.

Conclusion

事實上, 這裏的絕大多數內容在npm的doc上都有. 我只列舉了一部分經常使用的以及一些使用技巧. help命令的使用方式在大多數CLI應用上是差很少的, 你能夠觸類旁通地都本身試試. 若是有更好地建議或者錯誤須要指出, 敬請留言評論啦. That's All.

相關文章
相關標籤/搜索