庫 | 做用 |
---|---|
chalk-pipe | 使用更簡單的樣式字符串建立粉筆樣式方案 |
chalk | 正確處理終端字符串樣式 |
Commander.js | 完整的 node.js 命令行解決方案 |
Inquirer.js | 一組通用的交互式命令行用戶界面。 |
slash | 系統路徑符處理 |
minimist | 解析參數選項 |
dotenv | 將環境變量從 .env文件加載到process.env中 |
dotenv-expand | 擴展計算機上已經存在的環境變量 |
hash-sum | 很是快的惟一哈希生成器 |
deepmerge | 深度合併兩個或多個對象的可枚舉屬性。 |
yaml-front-matter | 解析yaml或json |
resolve | 實現node的 require.resolve() 算法,這樣就能夠異步和同步地使用require.resolve()表明文件 |
semver | npm的語義版本器 |
leven | 測量兩字符串之間的差別<br/>最快的JS實現之一 |
lru cache | 刪除最近最少使用的項的緩存對象 |
portfinder | 自動尋找 8000 至65535 內可用端口號 |
ora | 優雅的終端轉輪 |
envinfo | 生成故障排除軟件問題(如操做系統、二進制版本、瀏覽器、已安裝語言等)時所需的通用詳細信息的報告 |
memfs | 內存文件系統與Node's fs API相同實現 |
execa | 針對人類的流程執行 |
webpack-merge | 用於鏈接數組和合並對象,從而建立一個新對象 |
webpack-chain | 使用鏈式API去生成簡化webpack版本配置的修改 |
strip-ansi | 從字符串中去掉ANSI轉義碼 |
address | 獲取當前機器的IP, MAC和DNS服務器。 |
default-gateway | 經過對OS路由接口的exec調用得到機器的默認網關 |
joi | JavaScript最強大的模式描述語言和數據驗證器。 |
fs-extra | 添加了未包含在原生fs 模塊中的文件系統方法,並向fs 方法添加了promise支持 |
Acorn | 一個小而快速的JavaScript解析器,徹底用JavaScript編寫。 |
zlib.js | ZLIB.js是ZLIB(RFC1950), DEFLATE(RFC1951), GZIP(RFC1952)和PKZIP在JavaScript實現。 |
nodejs交互工具庫 -- chalk-pipe和chalkhtml
nodejs交互工具庫 -- commander和Inquirernode
nodejs交互工具庫 -- slash, minimist和dotenv, dotenv-expandwebpack
nodejs交互工具庫 -- hash-sum, deepmerge和yaml-front-mattergit
nodejs交互工具庫 -- resolve和semvergithub
nodejs交互工具庫 -- leven, lru cache和portfinderweb
nodejs交互工具庫 -- webpack-merge和webpack-chainjson
nodejs交互工具庫 -- strip-ansi, address, default-gateway和joisegmentfault
nodejs交互工具庫 -- fs-extra, Acorn和zlib
測量兩字符串之間的差別
最快的JS實現之一 Levenshtein distance 算法
yarn add leven
const leven = require('leven'); leven('cat', 'cow'); //=> 2
const leven = require('leven'); const ary = [ ['12345', '23456'], ['123', '456'], ['abc', 'cba'], ['因為我是中國人因此我會說中文', '因為我是英國人因此我會說英文'], ] ary.forEach(item => console.log(leven(item[0], item[1]))) // 2 // 3 // 2 // 2
基本經常使用的方法場景就這些了,更完整的用法能夠直接查閱文檔
刪除最近最少使用的項的緩存對象。
npm install lru-cache --save
var LRU = require("lru-cache") , options = { max: 500 , length: function (n, key) { return n * 2 + key.length } , dispose: function (key, n) { n.close() } , maxAge: 1000 * 60 * 60 } , cache = new LRU(options) , otherCache = new LRU(50) // sets just the max size cache.set("key", "value") cache.get("key") // "value" // non-string keys ARE fully supported // but note that it must be THE SAME object, not // just a JSON-equivalent object. var someObject = { a: 1 } cache.set(someObject, 'a value') // Object keys are not toString()-ed cache.set('[object Object]', 'a different value') assert.equal(cache.get(someObject), 'a value') // A similar object with same keys/values won't work, // because it's a different object identity assert.equal(cache.get({ a: 1 }), undefined) cache.reset() // empty the cache
若是你往裏面放更多的東西,那麼項目就會離隊。
若是你想把一個超大的東西放進去,它會立刻掉出來
max
緩存的最大大小,經過對緩存中的全部值應用長度函數來檢查。不設置這個有點傻,由於這就是這個庫的目的,但它默認爲無窮大。將其設置爲非數字或負數將拋出類型錯誤。設它爲0,它就是無窮。maxAge
最大壽命(毫秒), 項目的最大期限不會隨着時間的增加而自動刪除,可是若是你想要一個太舊的項目,它會刪除它並返回未定義的,而不是給你。設置爲負值會讓全部東西看起來都很舊!將其設置爲非數字將拋出類型錯誤。length
函數,用於計算存儲項的長度。若是你在存儲字符串或緩衝區,那麼你可能須要作一些相似 function(n, key){return n.length}
的事情. 默認爲function(){return 1}
, 若是你想存儲最大like-sized的東西,這是能夠的。項目做爲第一個參數傳遞,而鍵做爲第二個參數傳遞。dispose
函數,在從緩存中刪除項時對項調用。若是您想要關閉文件描述符或在項目再也不可訪問時執行其餘清理任務,這將很是方便. 使用key, value
調用.它在實際從內部緩存中移除項以前被調用,因此若是你想當即把它放回去,你必須在 nextTick
或者setTimeout
回調這麼作, 不然它不會作任何事情stale
默認狀況下,若是您設置了maxAge
,它實際上只會在您get(key)
時從緩存中提取儲存的項. (也就是說,它沒有預先執行 setTimeout
或其餘操做.) 若是你設置 stale:true
, 它將在刪除以前返回過時值。若是您沒有設置此設置,那麼當您嘗試獲取一個過時條目時,它將返回 undefined
,就好像它已經被刪除了同樣。noDisposeOnSet
默認狀況下,若是你設置 dispose()
方法, 而後它會被調用 set()
操做覆蓋現有key. 若是您設置此選項, dispose()
只在key從緩存中退出時調用,而不是在key被覆蓋時調用updateAgeOnGet
當使用有maxAge
的條目時 , 設置這個true
將使每一個項的有效時間在從緩存中檢索時更新爲當前時間,從而使其不過時。(固然,因爲使用的頻率不一樣,緩存仍然會失效.)set(key, value, maxAge)
get(key) => value
這兩種方法都將更新密鑰的「最近使用」狀態。他們作你想作的事. maxAge
是可選的和覆蓋緩存 maxAge
選項, 若是提供.
若是沒有找到key, get()
會返回 undefined
.
key 和val 能夠是任何值。
peek(key)
返回鍵值(或undefined
若是沒有找到)不更新「最近使用」的關鍵。
(若是您發現本身常用這種方法,那麼您可能使用了錯誤的數據結構類型,但在某些狀況下它仍是很方便的。)
del(key)
從緩存中刪除一個key
reset()
徹底清除緩存,丟棄全部值。
has(key)
檢查鍵是否在緩存中,而不更新其最近性或刪除其過期。
forEach(function(value,key,cache), [thisp])
正如 Array.prototype.forEach
. 按最近的順序遍歷緩存中的全部鍵。(也就是說,先迭代最近使用過的條目。)
rforEach(function(value,key,cache), [thisp])
與 cache.forEach(...)
一致可是項目是按相反的順序迭代的. (例如,最近使用的項目首先迭代.)
keys()
返回緩存中鍵的數組。
values()
返回緩存中值的數組。
length
考慮長度選項函數,返回緩存中對象的總長度。
itemCount
返回當前緩存中對象的總數。注意,stale
(參見選項)項將做爲此項計數的一部分返回。
dump()
返回準備序列化和使用的緩存項的數組 destinationCache.load(arr)
.
load(cacheEntriesArray)
用sourceCache.dump()
加載另外一個緩存項數組, 緩存在加載新條目以前重置目標緩存
prune()
手動遍歷整個緩存,主動刪除舊條目
基本經常使用的方法場景就這些了,更完整的用法能夠直接查閱文檔
自動尋找 8000
至65535
內可用端口號
yarn add portfinder
portfinder
模塊具備簡單的接口:
var portfinder = require('portfinder'); portfinder.getPort(function (err, port) { // // `port` is guaranteed to be a free port // in this scope. // });
或者使用promise (若是支持的話) :
const portfinder = require('portfinder'); portfinder.getPortPromise() .then((port) => { // // `port` is guaranteed to be a free port // in this scope. // }) .catch((err) => { // // Could not get a free port, `err` contains the reason. // });
若是 portfinder.getPortPromise()
在不支持promise的node版本上調用 (<4), 它會拋出一個錯誤除非 Bluebird 或者任何Promise pollyfill使用了
默認 portfinder
將從 8000
開始搜索a並掃描直到最大端口號(65535
)
你能夠經過設置來改變全局:
portfinder.basePort = 3000; // default: 8000 portfinder.highestPort = 3333; // default: 65535
或經過傳遞可選的選項對象在每次調用:
portfinder.getPort({ port: 3000, // minimum port stopPort: 3333 // maximum port }, callback);
基本經常使用的方法場景就這些了,更完整的用法能夠直接查閱文檔