原文地址: 8 npm Tricks You Can Use to Impress Your Colleagues
作者: Adir Amsalem
譯者: weapon-x
你看一個同事正在編碼,其中應用上了一些簡寫和技巧,不知為何,你不熟悉它並且你的大腦一片混亂,這種場景發生在過去我們每個人身上。
在這篇短文中,我們將會介紹一些非常實用的 npm 技巧。有很多文章中的技巧會比這里覆蓋得更廣,所以我選擇把重點放在與開發者最相關和使用的工作流中。
開始之前一些基礎的簡寫
為了讓每個人都對齊進度,特別是新來的同學,一起來快速瀏覽一遍基礎簡寫,保證沒有錯過任何細節。
安裝包
常規: npm install pkg
簡寫:npm i pkg
安裝包在全局
常規: npm i --global pkg
簡寫:npm i -g pkg
安裝包作為依賴(dependency)
常規: npm i --save pkg
簡寫:npm i -S pkg
安裝包作為開發依賴(devDependency)
常規: npm i --save-dev pkg
簡寫:npm i -D pkg
其余的簡寫請閱讀 npm 的簡寫列表
現在開始讓我們來做一些有趣的事情吧。
1.初始化一個新的包
我們都知道 npm init
,當我們創建一個新的包時,這是我們做的第一件事。
npm init 需要填寫一系列問題
但是,以上的問題是非常煩人的,同時我們會修改它,所以我們為什么不避開它呢?
npm init -y
和 npm init -f
可以很好地解決。
npm init -y
2.運行測試
另一個我們都會用到的命令是 npm test
,我們當中大多數人每天都在使用它,可能一天好幾次。
npm test
假如我告訴,你用減少 40% 的字數做同樣的事情那要怎么做呢?我們可以這樣做,並且這是一個完勝。
那就是 npm t
。
npm t
3.列舉可運行的腳本
我們拿到了一個新項目,就會考慮如何去開始上手。我們經常會自問這些事情:我該如何運行呢?哪些腳本是可用的呢?
一個方法是打開 package.json
文件並檢查 scripts
部分。
package.json
我們當然可以做得更好,所以我們可以運行 npm run
並且得到所有可用腳本的列表。
npm run
其余的選項可以安裝 ntl (npm i -g ntl
),然后在項目文件目錄下運行 ntl
,這樣可以讓運行腳本變得非常方便。
ntl
4.列舉已安裝的包
與可用腳本相似,有時我們會問自己:我們擁有哪些依賴包在項目中。
我們可以再一次打開 package.json
文件去檢查,但是我們已經知道可以做的更好。
迎接 npm ls --depth 0
。
npm ls --depth 0
列舉全局安裝的包,我們可以加上 -g
標志,npm ls -g --depth 0
。
npm ls -g --depth 0
5.運行本地安裝的可執行文件
我們安裝了包在項目中,它附帶了一個可執行文件,但是它只能通過 npm 腳本來運行,你想知道為什么或者如何去拿下它嗎?
首先來理解為什么 -- 當我們在 terminal 中執行命令時,實際發生的是,它在 PATH 環境變量里列舉出所有的路徑,去尋找相同名字的可執行文件。安裝在本地的包只在本地注冊了他們的執行文件,所以他們不會被列在 PATH 環境變量中以至於不會被找到。
這時你可能會問,當我們通過 npm 腳本運行這些可執行文件時是如何正常工作的?問的好!這是因為 npm 用了一些“手法”並且添加了額外的文件夾到 PATH
中,<project-directory>/node_modules/.bin
。
你可以通過運行 npm run env | grep "$PATH
看到它,也可以運行 npm run env
來看到所有可用的環境變量,npm 會添加一些有趣的東西。
node_modules/.bin
,假如你知道,這恰恰就是本地安裝包放置其可執行文件的地方。
在項目目錄下,讓我們來運行 ./node_modules/.bin/mocha
看看。
./node_modules/.bin/mocha
很簡單對吧?無論何時,你想要運行本地安裝的執行文件的話就運行./node_modules/.bin/<command>
。
6.在網上找到你的包
你可能會在 package.json 文件中看到倉庫的入口並且想知道它用來做什么呢?
回答這個問題,只需要簡單地運行 npm repo
就可以在瀏覽器打開並查看了。
還有同樣適用的是,npm home
命令對應 homepage
入口。
假如你想在 npmjs.com 打開包的頁面,這也有相當棒的簡寫可以做到,npm docs
。
7.在其他腳本之前和之后運行腳本
你可能熟悉諸如預測試之類的腳本,這允許你可以在運行測試腳本之前編寫代碼。
你可能會驚喜地發現,對於每個腳本可以有 pre 和 post 腳本,包括你自己的腳本。
pre and post script
這在使用 npm 作為構建工具和需要編寫許多腳本的項目中會非常有用。
8.檢測包的版本
假如你擁有一個包,使用了 semver (語義化版本規范)來控制版本,在發布新版本之前需要做一次版本檢測。
其中一個方法是,打開 package.json
文件去手動修改版本,但我們希望不要這樣去做。
更簡單的方法是運行 npm version
帶上 major
,minor
或者 patch
。
npm version
9.npm link
是用來鏈接全局包的命令,npm link
主要是為模塊開發者使用的一個命令,設想這樣的一個情景:你開發了一個模塊a並發布了(npm public
),並在項目中引入這個模塊,在使用過程中發現了a有bug,你改動了a,於是需要重新npm public
,發布完你又要回到自己的項目中用npm update
命令來更新模塊,如果只是小改動還好,如果是開發初期的頻繁更新,那么就很浪費時間,畢竟自己開發的模塊在本機還要更新,這個步驟明顯很多余。npm link
命令就是用來同步模塊更新的,一般應用場景如下:
自己開發的包名為appy,放在src/appy文件夾——cd to src/appy
——npm link
,將會把src/appy
這個包復制到npm的全局模塊安裝文件夾node_modules
內,並創建符號鏈接(symbolic link,應該是一個軟鏈接)——自己的項目放在src/mysite文件夾——cd to src/mysite
——npm link appy
,那么項目中的appy包就會和src/appy相關聯,每次npm publish后,項目文件夾里面的appy包都會隨之更新。
有時候這個包並不是你開發的,但是你想contribute這個包時,也可以在自己的項目文件夾中直接用npm link <package>
,這個包同樣會被安裝到全局,並和此項目中的包相關聯。
10.npm root [-g]
,打印出node_modules文件夾路徑,加個-g
可以查看全局包的安裝路徑,有時候忘了全局包安裝路徑這個小命令還是蠻有用的。
11.npm run <command>
用npm run來跑package.json里面script
字段內的命令,可以直接打npm run
查看有哪些命令
12.npm update [-g] [<pkg>...]
用來更新包,需要注意的是包更新依然需要符合package.json
中的版本號范圍,只會在版本號范圍內更新最新版本的包。有-g
,--dev
,--save
參數,沒有加具體包名時默認更新所有的包。
13.npm docs <pkg>
這個命令可以直接打開包的官方文檔網站,一般就是github
了,不過打開速度不是很快。
目前為止,以上就是全部了。
我希望你能學到新的東西和找到一個對日常工作有用的技巧,可以更好的了解 npm 並且有一些新的想法可以更好地運用在工作中。
更好地打動你的同事,最好經常學習新的東西變得更加專業。
如果你知道其他的實用技巧,請在評論中分享~