nodejs交互工具庫 -- leven, lru cache和portfinder

nodejs交互工具庫系列

做用
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 自動尋找 800065535內可用端口號
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交互工具庫 -- ora和envinfo算法

nodejs交互工具庫 -- memfs和execanpm

nodejs交互工具庫 -- webpack-merge和webpack-chainjson

nodejs交互工具庫 -- strip-ansi, address, default-gateway和joisegmentfault

nodejs交互工具庫 -- fs-extra, Acorn和zlib

leven

測量兩字符串之間的差別
最快的JS實現之一 Levenshtein distance 算法

Install

yarn add leven

Usage

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

參考

基本經常使用的方法場景就這些了,更完整的用法能夠直接查閱文檔

leven

lru cache

刪除最近最少使用的項的緩存對象。

Installation:

npm install lru-cache --save

Usage:

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

若是你往裏面放更多的東西,那麼項目就會離隊。

若是你想把一個超大的東西放進去,它會立刻掉出來

Options

  • 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 將使每一個項的有效時間在從緩存中檢索時更新爲當前時間,從而使其不過時。(固然,因爲使用的頻率不一樣,緩存仍然會失效.)

API

  • 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()

    手動遍歷整個緩存,主動刪除舊條目

參考

基本經常使用的方法場景就這些了,更完整的用法能夠直接查閱文檔

node-lru-cache

portfinder

自動尋找 800065535內可用端口號

Installation

yarn add portfinder

Usage

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使用了

Ports search scope

默認 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);

參考

基本經常使用的方法場景就這些了,更完整的用法能夠直接查閱文檔

node-portfinder

相關文章
相關標籤/搜索