若是你寫js, 或者使用hexo
一類的博客工具, 那麼應該不會對npm
感到陌生.html
npm
是Node.js
的包管理工具(package manager), 它的背後是Node.js
的社區生態在支持. 咱們今天聊聊npm
的玩兒法, 包括了經常使用的命令和參數以及在具體場景下的用法.node
咱們今天只談npm
, 相關的輔助工具各位能夠留言評論.git
幾乎全部的命令行工具/程序(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版本, 可能須要加上-l
or --long
參數瀏覽器
而--help
參數則會顯示一份簡短的說明.能夠看到init
是有兩個別名
的, 分別是create
和innit
, 而且帶有四個參數,分別是--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
倉庫上. 所以設置registry
跟proxy
也是比較經常使用的命令
咱們仍是先跑一下幫助, 看看能獲得什麼信息
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-sass
及electron
一類須要執行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-exact
跟npm
執行的升級策略有關, 這裏不作具體闡述. 最後一個你應該也猜到了它的做用, 就是隻安裝, 可是不保存依賴信息到package,json
當中.
事實上, install
及其餘命令所能附加的參數遠不止這裏羅列的這些, 你也能夠經過--registry
參數指定這一次安裝所使用的npm
源, 或者使用--no-proxy
指定這一次暫時不用代理, 使用--save-exact
指定按照package.json
裏的版本號安裝依賴來避免惱人的自動向上更新策略等等, 這些參數是能夠累加的, 具體的用法及可用的參數能夠參考npm help install
給出的文檔, 這裏只作簡單提示.
不少時候, 不少問題都是在關鍵的時候出現的. 好比你想安裝一個包的時候, 死活安裝不上來, 各類錯誤都有...這裏咱們簡單列舉幾個平時比較有可能遇到的.
致使這個問題的緣由通常有兩種, 要麼, 你開了代理, 可是使用的npm
源是代理服務器沒法訪問的; 要麼, 你上一次的CTRL+C
致使了npm的緩存出現了問題, 你須要npm cache clean
這個命令, 記得加上--force
. 如同運行以後給出的提示, 咱們只建議你在走投無路的時候嘗試, 由於node_modules
機制下, 緩存是比較珍貴的🙃.
基本上, 出現這個錯誤的時候錯誤信息已經告訴你是權限問題了, Unix
系統下須要sudo
執行, Windows NT
下須要管理員身份的command prompt
.
你多是中了semver
版本策略的招, 具體的能夠經過npm help update
查看詳細的升級策略, 具體的解法是, 你可讓其餘人在執行install
命令的時候加上--save-exact
參數.
發佈的話, 除了publish
, 有一個比較使用的命令, 就是whoami
. 它能夠查看當前registry
下登陸的用戶, 未登陸或者登陸的registry
不對就會給出error.
事實上, 這裏的絕大多數內容在npm
的doc上都有. 我只列舉了一部分經常使用的以及一些使用技巧. help
命令的使用方式在大多數CLI
應用上是差很少的, 你能夠觸類旁通地都本身試試. 若是有更好地建議或者錯誤須要指出, 敬請留言評論啦. That's All.