庫 | 做用 |
---|---|
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-chain編程
nodejs交互工具庫 -- strip-ansi, address, default-gateway和joijson
nodejs交互工具庫 -- fs-extra, Acorn和zlib
實現node的 require.resolve()
算法,這樣就能夠異步和同步地使用require.resolve()表明文件
異步解析:
var resolve = require('resolve'); resolve('tap', { basedir: __dirname }, function (err, res) { if (err) console.error(err); else console.log(res); });
$ node example/async.js /home/substack/projects/node-resolve/node_modules/tap/lib/main.js
同步解析:
var resolve = require('resolve'); var res = resolve.sync('tap', { basedir: __dirname }); console.log(res);
$ node example/sync.js /home/substack/projects/node-resolve/node_modules/tap/lib/main.js
var resolve = require('resolve');
對於同步和異步方法,錯誤可能具備如下任何一種err.code
值
MODULE_NOT_FOUND
: 給定的路徑字符串 (id
) 沒法解析到模塊INVALID_BASEDIR
: 指定的 opts.basedir
不存在,或者不是目錄INVALID_PACKAGE_MAIN
: package.json
遇到了一個無效的 main
屬性(如。不是一個字符串)異步解析模塊路徑字符串 id
進 cb(err, res [, pkg])
, pkg
(若是定義)是來自的數據 package.json
.
選項有:
package.json
能應用被加載模塊的數據opts.packageFilter(pkg, pkgfile, dir)
- 在查看「main」字段以前先轉換已解析的package.json內容
opts.pathFilter(pkg, path, relativePath)
- 轉換包中的路徑
opts.paths - require.paths數組使用,若是沒有找到正常 node_modules
遞歸遍歷(可能不用這個)
對於高級用戶, paths
也能夠是 opts.paths(request, start, opts)
函數
node_modules
解決方案opts.packageIterator(request, start, opts)
- 返回能夠找到包源的候選路徑列表(可能不使用這個)
node_modules
解決方案"node_modules"
默認 opts
值:
{ paths: [], basedir: __dirname, extensions: ['.js'], readFile: fs.readFile, isFile: function isFile(file, cb) { fs.stat(file, function (err, stat) { if (!err) { return cb(null, stat.isFile() || stat.isFIFO()); } if (err.code === 'ENOENT' || err.code === 'ENOTDIR') return cb(null, false); return cb(err); }); }, isDirectory: function isDirectory(dir, cb) { fs.stat(dir, function (err, stat) { if (!err) { return cb(null, stat.isDirectory()); } if (err.code === 'ENOENT' || err.code === 'ENOTDIR') return cb(null, false); return cb(err); }); }, realpath: function realpath(file, cb) { var realpath = typeof fs.realpath.native === 'function' ? fs.realpath.native : fs.realpath; realpath(file, function (realPathErr, realPath) { if (realPathErr && realPathErr.code !== 'ENOENT') cb(realPathErr); else cb(null, realPathErr ? file : realPath); }); }, moduleDirectory: 'node_modules', preserveSymlinks: false }
同步解析模塊路徑字符串id,返回結果並在id沒法解析時拋出錯誤。
選項有:
opts.packageFilter(pkg, pkgfile, dir)
- 轉換解析後package.json內容,而後查看「main」字段
opts.pathFilter(pkg, path, relativePath)
- 轉換包中的路徑
opts.paths - require.paths數組使用,若是沒有找到正常 node_modules
遞歸遍歷(可能不用這個)
對於高級用戶, paths
也能夠是 opts.paths(request, start, opts)
函數
node_modules
解決方案opts.packageIterator(request, start, opts)
- 返回能夠找到包源的候選路徑列表(可能不使用這個)
node_modules
解決方案"node_modules"
default opts
values:
{ paths: [], basedir: __dirname, extensions: ['.js'], readFileSync: fs.readFileSync, isFile: function isFile(file) { try { var stat = fs.statSync(file); } catch (e) { if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false; throw e; } return stat.isFile() || stat.isFIFO(); }, isDirectory: function isDirectory(dir) { try { var stat = fs.statSync(dir); } catch (e) { if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false; throw e; } return stat.isDirectory(); }, realpathSync: function realpathSync(file) { try { var realpath = typeof fs.realpathSync.native === 'function' ? fs.realpathSync.native : fs.realpathSync; return realpath(file); } catch (realPathErr) { if (realPathErr.code !== 'ENOENT') { throw realPathErr; } } return file; }, moduleDirectory: 'node_modules', preserveSymlinks: false }
yarn add resolve
基本經常使用的方法場景就這些了,更完整的用法能夠直接查閱文檔
npm的語義版本器
yarn add semver
做爲node模塊
const semver = require('semver') semver.valid('1.2.3') // '1.2.3' semver.valid('a.b.c') // null semver.clean(' =v1.2.3 ') // '1.2.3' semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true semver.gt('1.2.3', '9.8.7') // false semver.lt('1.2.3', '9.8.7') // true semver.minVersion('>=1.0.0') // '1.0.0' semver.valid(semver.coerce('v2')) // '2.0.0' semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'
若是但願最小化內存佔用,還能夠爲所關心的函數加載模塊。
// load the whole API at once in a single object const semver = require('semver') // or just load the bits you need // all of them listed here, just pick and choose what you want // classes const SemVer = require('semver/classes/semver') const Comparator = require('semver/classes/comparator') const Range = require('semver/classes/range') // functions for working with versions const semverParse = require('semver/functions/parse') const semverValid = require('semver/functions/valid') const semverClean = require('semver/functions/clean') const semverInc = require('semver/functions/inc') const semverDiff = require('semver/functions/diff') const semverMajor = require('semver/functions/major') const semverMinor = require('semver/functions/minor') const semverPatch = require('semver/functions/patch') const semverPrerelease = require('semver/functions/prerelease') const semverCompare = require('semver/functions/compare') const semverRcompare = require('semver/functions/rcompare') const semverCompareLoose = require('semver/functions/compare-loose') const semverCompareBuild = require('semver/functions/compare-build') const semverSort = require('semver/functions/sort') const semverRsort = require('semver/functions/rsort') // low-level comparators between versions const semverGt = require('semver/functions/gt') const semverLt = require('semver/functions/lt') const semverEq = require('semver/functions/eq') const semverNeq = require('semver/functions/neq') const semverGte = require('semver/functions/gte') const semverLte = require('semver/functions/lte') const semverCmp = require('semver/functions/cmp') const semverCoerce = require('semver/functions/coerce') // working with ranges const semverSatisfies = require('semver/functions/satisfies') const semverMaxSatisfying = require('semver/ranges/max-satisfying') const semverMinSatisfying = require('semver/ranges/min-satisfying') const semverToComparators = require('semver/ranges/to-comparators') const semverMinVersion = require('semver/ranges/min-version') const semverValidRange = require('semver/ranges/valid') const semverOutside = require('semver/ranges/outside') const semverGtr = require('semver/ranges/gtr') const semverLtr = require('semver/ranges/ltr') const semverIntersects = require('semver/ranges/intersects') const simplifyRange = require('semver/ranges/simplify') const rangeSubset = require('semver/ranges/subset')
做爲命令行工具:
$ semver -h A JavaScript implementation of the https://semver.org/ specification Copyright Isaac Z. Schlueter Usage: semver [options] <version> [<version> [...]] Prints valid versions sorted by SemVer precedence Options: -r --range <range> Print versions that match the specified range. -i --increment [<level>] Increment a version by the specified level. Level can be one of: major, minor, patch, premajor, preminor, prepatch, or prerelease. Default level is 'patch'. Only one version may be specified. --preid <identifier> Identifier to be used to prefix premajor, preminor, prepatch or prerelease version increments. -l --loose Interpret versions and ranges loosely -p --include-prerelease Always include prerelease versions in range matching -c --coerce Coerce a string into SemVer if possible (does not imply --loose) --rtl Coerce version strings right to left --ltr Coerce version strings left to right (default) 若是任何有效版本知足全部提供的範圍,程序將成功退出,並打印全部知足的版本。 若是沒有找到滿意的版本,則退出失敗。 版本是按升序打印的,所以向實用程序提供多個版本只是對它們進行排序。
「version」由在https://semver.org/找到的v2.0...。
開頭的 「=」
或「v」
字符被刪除並忽略。
version range
是一套 comparators
指定知足範圍的版本。
comparator
由operator
和 version
組成。原始運算符集合爲:
<
小於<=
小於或等於>
大於>=
大於或等於=
平等的。若是沒有指定操做符,則假定相等,所以該操做符是可選的,但能夠包含其中。例如, comparator >=1.2.7
將匹配版本1.2.7
, 1.2.8
, 2.5.3
, 和1.3.9
, 但不是版本 1.2.6
或1.1.0
.
Comparators能夠用空格鏈接成 comparator set
,這是由它所包含的全部比較器的交點所知足的。
一個範圍由一個或多個比較器集合組成,並由||鏈接起來。 當且僅當至少一個||分離的比較器集合中的每一個比較器的版本知足時,版本匹配一個範圍。
例如,範圍 >=1.2.7 <1.3.0
將匹配版本 1.2.7
, 1.2.8
, 和1.2.99
, 但不是版本 1.2.6
, 1.3.0
, 或1.1.0
.
範圍 1.2.7 || >=1.2.9 <2.0.0
將匹配版本 1.2.7
, 1.2.9
, 和 1.4.6
, 但不是版本 1.2.8
或2.0.0
.
若是一個版本有prerelease標籤(例如, 1.2.3-alpha.3
),那麼只有當至少一個具備相同元組的[major, minor, patch]
的comparator也有prerelease標籤時,才容許它知足comparator集。
例如,範圍 >1.2.3-alpha.3
將被容許與版本1.2.3-alpha.7
匹配,但它不會知足3.4.5-alpha.9
,儘管是3.4.5 alpha.9
在技術上「大於」1.2.3-alpha.3
根據SemVer排序規則。版本範圍只接受 1.2.3
版本的預發行標籤。版本3.4.5
將知足這個範圍,由於它沒有prerelease標誌,並且 3.4.5
大於1.2.3-alpha.7
。
這種行爲的目的是雙重的。首先,預發行版本常常更新得很是快,而且包含了許多(根據做者的設計)還不適合公衆使用的破壞性更改。所以,默認狀況下,它們被排除在範圍匹配語義以外。
第二,選擇使用預發行版本的用戶已經明確表示了使用特定的alpha/beta/rc版本集的意圖。經過在範圍內包含prerelease標籤,用戶代表他們意識到了風險。然而,假設他們在下一組預發行版本中選擇承擔相似的風險仍然是不恰當的。
注意,能夠經過將options對象上的 includePrerelease
標記設置爲執行範圍匹配的任何函數來抑制此行爲(將全部prerelease版本視爲正常版本,以便進行範圍匹配)。
.inc
方法有一個附加的identifier
字符串參數,它將附加字符串的值做爲預發佈標識符:
semver.inc('1.2.3', 'prerelease', 'beta') // '1.2.4-beta.0'
命令行示例:
$ semver 1.2.3 -i prerelease --preid beta 1.2.4-beta.0
可用於進一步增長:
$ semver 1.2.4-beta.0 -i prerelease 1.2.4-beta.1
高級範圍語法以肯定的方式轉換爲基本比較器。
高級範圍能夠像原始比較器同樣使用空格或 ||
組合。
X.Y.Z - A.B.C
指定包含集。
1.2.3 - 2.3.4
:= >=1.2.3 <=2.3.4
若是提供的部分版本是包含範圍內的第一個版本,那麼丟失的部分將被替換爲零。
1.2 - 2.3.4
:= `>=1.2.0 <=2.3.4若是提供的部分版本做爲包含範圍中的第二個版本,則接受以提供的元組部件開始的全部版本,但不接受大於提供的元組部件的版本。
1.2.3 - 2.3
:= >=1.2.3 <2.4.0-0
1.2.3 - 2
:= >=1.2.3 <3.0.0-0
1.2.x
1.X
1.2.*
*
任何 X、x
或*
均可用於「代入」其中一個數值 [major, minor, patch]
元組.
*
:= >=0.0.0
(Any version satisfies)1.x
:= >=1.0.0 <2.0.0-0
(Matching major version)1.2.x
:= >=1.2.0 <1.3.0-0
(Matching major and minor versions)部分版本範圍被視爲x範圍,所以特殊字符其實是可選的。
""
(empty string) := *
:= >=0.0.0
1
:= 1.x.x
:= >=1.0.0 <2.0.0-0
1.2
:= 1.2.x
:= >=1.2.0 <1.3.0-0
~1.2.3
~1.2
~1
若是在比較器上指定了次要版本,則容許補丁級更改。若是不容許,容許小級別更改。
~1.2.3
:= >=1.2.3 <1.(2+1).0
:= >=1.2.3 <1.3.0-0
~1.2
:= >=1.2.0 <1.(2+1).0
:= >=1.2.0 <1.3.0-0
(Same as 1.2.x
)~1
:= >=1.0.0 <(1+1).0.0
:= >=1.0.0 <2.0.0-0
(Same as 1.x
)~0.2.3
:= >=0.2.3 <0.(2+1).0
:= >=0.2.3 <0.3.0-0
~0.2
:= >=0.2.0 <0.(2+1).0
:= >=0.2.0 <0.3.0-0
(Same as 0.2.x
)~0
:= >=0.0.0 <(0+1).0.0
:= >=0.0.0 <1.0.0-0
(Same as 0.x
)~1.2.3-beta.2
:= >=1.2.3-beta.2 <1.3.0-0
注意,1.2.3
版本中的prerelease將被容許,若是它們大於或等於beta.2
。因此,1.2.3-beta.4
是容許的,但1.2.4-beta.2
不會,由於它是一個不一樣 [major, minor, patch]
元組的預發行。^1.2.3
^0.2.5
^0.0.4
容許不修改 [major, minor, patch]
元組屬性中最左邊的非零元素更改. 換句話說,這容許 1.0.0
及以上版本的補丁和小更新, 0.X >=0.1.0
版本的補丁更新, 0.0.X
版本沒有更新.
許多做者對待0.x
就好像 x
是主要的「中斷-更改」指示器。
看成者可能進行中斷更改時,在 0.2.4
和0.3.0
發佈管理之間插入符號範圍是理想的, 這是一種常見的作法. However, 它假定 0.2.4
和 0.2.5
二者之間不會有中斷變化. 根據一般觀察到的實踐,它容許假定是附加的(但不會破壞)更改。
^1.2.3
:= >=1.2.3 <2.0.0-0
^0.2.3
:= >=0.2.3 <0.3.0-0
^0.0.3
:= >=0.0.3 <0.0.4-0
^1.2.3-beta.2
:= >=1.2.3-beta.2 <2.0.0-0
Note that prereleases in the 1.2.3
version will be allowed, if they are greater than or equal to beta.2
. So, 1.2.3-beta.4
would be allowed, but 1.2.4-beta.2
would not, because it is a prerelease of a different [major, minor, patch]
tuple.^0.0.3-beta
:= >=0.0.3-beta <0.0.4-0
Note that prereleases in the 0.0.3
version only will be allowed, if they are greater than or equal to beta
. So, 0.0.3-pr.2
would be allowed.在解析插入符號範圍時,缺失的patch
值將退化爲0,但容許在該值內保持靈活性,即便主版本和次版本都爲0。
^1.2.x
:= >=1.2.0 <2.0.0-0
^0.0.x
:= >=0.0.0 <0.1.0-0
^0.0
:= >=0.0.0 <0.1.0-0
缺失的 minor
和patch
值將退化爲零,但也容許在這些值中保持靈活性,即便主版本爲零。
^1.x
:= >=1.0.0 <2.0.0-0
^0.x
:= >=0.0.0 <1.0.0-0
把全部這些放在一塊兒,下面是一個用於範圍的Backus-Naur語法,以方便解析器做者:
range-set ::= range ( logical-or range ) * logical-or ::= ( ' ' ) * '||' ( ' ' ) * range ::= hyphen | simple ( ' ' simple ) * | '' hyphen ::= partial ' - ' partial simple ::= primitive | partial | tilde | caret primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )? xr ::= 'x' | 'X' | '*' | nr nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) * tilde ::= '~' partial caret ::= '^' partial qualifier ::= ( '-' pre )? ( '+' build )? pre ::= parts build ::= parts parts ::= part ( '.' part ) * part ::= nr | [-0-9A-Za-z]+
全部方法和類都採用最終的options
對象參數。此對象中的全部選項默認爲 false
。支持的選項有:
loose
對不徹底有效的semver字符串更加寬容。(固然,任何結果輸出都是100%嚴格兼容的。)因爲向後兼容性的緣由,若是options參數是一個布爾值而不是一個對象,它將被解釋爲鬆散參數。includePrerelease
設置爲禁止從範圍中排除預先標記的版本的默認行爲,除非它們被顯式地選擇。嚴格模式比較器和範圍對於解析的SemVer字符串是嚴格的。
valid(v)
: 返回解析後的版本,若是無效則返回nullinc(v, release)
: 返回按發佈類型遞增的版本 (major
, premajor
, minor
, preminor
, patch
, prepatch
, 或者prerelease
), 或null,若是它無效
premajor
在一個調用中會將版本提高到下一個主版本並下降到主版本的預發行版. preminor
, 和prepatch
以一樣的方式工做。prerelease
和 prepatch
同樣的運做. 它增長補丁版本,而後製做預發行版。若是輸入的版本已是預發行版本,它就會增長它。prerelease(v)
: 返回預發行組件的數組,若是不存在,則返回null. 例如: prerelease('1.2.3-alpha.1') -> ['alpha', 1]
major(v)
: 返回主版本號。minor(v)
: 返回副版本號。patch(v)
: 返回補丁版本號。intersects(r1, r2, loose)
: 若是兩個提供的範圍或比較器相交,則返回true。parse(v)
: 嘗試將字符串解析爲語義版本,返回 SemVer
對象或者 null
.gt(v1, v2)
: v1 > v2
gte(v1, v2)
: v1 >= v2
lt(v1, v2)
: v1 < v2
lte(v1, v2)
: v1 <= v2
eq(v1, v2)
: v1 == v2
若是它們在邏輯上是等價的,即便它們不是徹底相同的字符串。您已經知道如何比較字符串。neq(v1, v2)
: v1 != v2
eq
的反面.cmp(v1, comparator, v2)
: 傳入一個比較字符串,它將調用上面對應的函數. "==="
和 "!=="
作簡單的字符串比較,可是爲了完整起見,這裏包含了。若是提供了無效的比較字符串,則引起。compare(v1, v2)
: 若是v1 == v2返回0,若是v1大於1,若是v2大於-1。若是傳遞給Array.sort(),則按升序排序。rcompare(v1, v2)
: 是compare的反義詞。傳遞到的版本數組按降序排序 Array.sort()
.compareBuild(v1, v2)
: 與比較相同,但在兩個版本相同時考慮構建。若是傳遞給Array.sort(),則按升序排序。v2更大。若是傳遞給 Array.sort()
,則按升序排序。diff(v1, v2)
: 按發佈類型返回兩個版本之間的差別 (major
, premajor
, minor
, preminor
, patch
, prepatch
, 或者prerelease
), 或若是版本相同,則爲null。intersects(comparator)
: 若是比較器相交,返回truevalidRange(range)
: 返回有效範圍,若是無效則返回nullsatisfies(version, range)
: 若是版本知足範圍,則返回true。maxSatisfying(versions, range)
: 返回列表中知足範圍的最高版本,若是沒有一個版本知足範圍,則返回nullminSatisfying(versions, range)
: 返回列表中知足範圍的最低版本,若是沒有一個版本知足範圍,則返回null。minVersion(range)
: 返回可能與給定範圍匹配的最低版本。gtr(version, range)
: 若是版本大於範圍內全部可能的版本,則返回true。ltr(version, range)
: 若是版本小於範圍內全部可能的版本,則返回true。outside(version, range, hilo)
: 若是版本在高方向或低方向超出範圍的範圍,則返回true。hilo參數必須是字符串 '>'
或'<'
。(這是gtr
和ltr
調用的函數。)intersects(range)
: 若是任何一個範圍比較器相交,返回truesimplifyRange(versions, range)
: 返回一個「簡化」範圍,該範圍匹配版本列表中指定的相同項。注意,它並不保證在全部狀況下都匹配相同的版本,只對提供的一組版本進行匹配。這在經過編程方式將多個版本與||結合在一塊兒生成範圍時很是有用,能夠爲用戶提供一些更符合人體工程學的東西。若是提供的範圍的字符串長度小於生成的範圍,則返回該範圍。subset(subRange, superRange)
: 若是子程序範圍徹底包含在超範圍範圍內,則返回true。注意,因爲範圍多是非連續的,版本可能不大於範圍、小於範圍或知足範圍!例如,範圍 1.2 <1.2.9 || >2.0.0
從1.2.9
到2.0.0
會有一個洞,因此 1.2.10
版本不會大於範圍(由於2.0.1
知足,較高),也不到範圍(由於1.2.8
知足,這是低),並且它也不知足。
若是您想知道某個版本是否知足某個範圍,可使用satisfies(version, range)
函數。
coerce(version, options)
: 若是可能,強制字符串semver這樣作的目的是提供一個很是寬容的非semver字符串到semver的轉換。它查找字符串中的第一個數字,並消耗至少知足部分分配器的全部其他字符(例如., 1
, 1.2
, 1.2.3
) 最大容許長度(256個字符)。較長的版本被簡單地截斷 (4.6.3.9.2-alpha2
變成4.6.3
). 全部周圍的文本都被忽略了 (v3.4 replaces v3.3.1
變成3.4.0
). 只有缺乏數字的文本不能強制 (version one
無效). 考慮強制的任何semver組件的最大長度是16個字符;較長的組件將被忽略 (10000000000000000.4.7.4
變成4.7.4
). 任何semver組件的最大值爲 Number.MAX_SAFE_INTEGER || (2**53 - 1)
; 更高值組件無效 (9999999999999999.4.7.4
多是無效的).
若是 options.rtl
標記已經設置了, 而後coerce
返回最右端的可壓縮性元組,不與更長的可壓縮性元組共享結束索引. 例如, 1.2.3.4
會返回 2.3.4
在 rtl 模式, 而不是4.0.0
. 1.2.3/4
會返回 4.0.0
, 由於4
不是任何其餘重疊的SemVer元組的一部分。
clean(version)
: 若是可能的話,將字符串清除爲有效的semver這將返回一個乾淨和修剪過的semver版本。若是提供的版本無效,將返回null。這對範圍不適用。
ex.
s.clean(' = v 2.1.5foo')
: null
s.clean(' = v 2.1.5foo', { loose: true })
: '2.1.5-foo'
s.clean(' = v 2.1.5-foo')
: null
s.clean(' = v 2.1.5-foo', { loose: true })
: '2.1.5-foo'
s.clean('=v2.1.5')
: '2.1.5'
s.clean(' =v2.1.5')
: 2.1.5
s.clean(' 2.1.5 ')
: '2.1.5'
s.clean('~1.0.0')
: null
若是您對打包和樹抖動問題很敏感,那麼能夠只使用這個semver實用程序的一部分。主要的require('semver')
導出使用getter函數惰性地加載所使用的API的部分。
如下模塊可供選擇:
require('semver')
require('semver/classes')
require('semver/classes/comparator')
require('semver/classes/range')
require('semver/classes/semver')
require('semver/functions/clean')
require('semver/functions/cmp')
require('semver/functions/coerce')
require('semver/functions/compare')
require('semver/functions/compare-build')
require('semver/functions/compare-loose')
require('semver/functions/diff')
require('semver/functions/eq')
require('semver/functions/gt')
require('semver/functions/gte')
require('semver/functions/inc')
require('semver/functions/lt')
require('semver/functions/lte')
require('semver/functions/major')
require('semver/functions/minor')
require('semver/functions/neq')
require('semver/functions/parse')
require('semver/functions/patch')
require('semver/functions/prerelease')
require('semver/functions/rcompare')
require('semver/functions/rsort')
require('semver/functions/satisfies')
require('semver/functions/sort')
require('semver/functions/valid')
require('semver/ranges/gtr')
require('semver/ranges/intersects')
require('semver/ranges/ltr')
require('semver/ranges/max-satisfying')
require('semver/ranges/min-satisfying')
require('semver/ranges/min-version')
require('semver/ranges/outside')
require('semver/ranges/to-comparators')
require('semver/ranges/valid')
基本經常使用的方法場景就這些了,更完整的用法能夠直接查閱文檔