使用 semver 包判断版本是否匹配
Use semver package to determine if version matches
假设我在 .npm 缓存中有这个:
lodash/
1.2.4/
1.3.3/
2.11.2/
我想做的是读取 lodash 文件夹中的目录,看看是否有任何版本可以接受。
说我要找这个版本:
"lodash":"^2.11.1"
或
"lodash":"~2.11.1"
如何将缓存中的版本与所需版本进行比较,以查看缓存中的版本是否满足要求?
这是我现在拥有的:
'use strict';
import semver = require('semver');
import async = require('async');
import * as cp from 'child_process';
import * as fs from 'fs';
import * as path from 'path';
export const cacheHas = function (getCacheLocation: string, dep: string, version: string, cb: any) {
const dir = path.resolve(getCacheLocation + '/' + dep);
fs.readdir(dir, function (err, items) {
if (err) {
return cb(err);
}
const matches = items.some(function (v) {
return semver.eq(v, version);
});
return cb(null, matches);
});
};
所以我只是在使用 semver.eq()
...所以我的问题是,除了 semver.eq()
之外还有更好的调用吗?
semver
包中有一个 satisfies
函数可以做到这一点:
semver.satisfies(v, version)
(其中 v
是您缓存中的内容,version
是您要测试的范围,如果 v
满足)
假设我在 .npm 缓存中有这个:
lodash/
1.2.4/
1.3.3/
2.11.2/
我想做的是读取 lodash 文件夹中的目录,看看是否有任何版本可以接受。
说我要找这个版本:
"lodash":"^2.11.1"
或
"lodash":"~2.11.1"
如何将缓存中的版本与所需版本进行比较,以查看缓存中的版本是否满足要求?
这是我现在拥有的:
'use strict';
import semver = require('semver');
import async = require('async');
import * as cp from 'child_process';
import * as fs from 'fs';
import * as path from 'path';
export const cacheHas = function (getCacheLocation: string, dep: string, version: string, cb: any) {
const dir = path.resolve(getCacheLocation + '/' + dep);
fs.readdir(dir, function (err, items) {
if (err) {
return cb(err);
}
const matches = items.some(function (v) {
return semver.eq(v, version);
});
return cb(null, matches);
});
};
所以我只是在使用 semver.eq()
...所以我的问题是,除了 semver.eq()
之外还有更好的调用吗?
semver
包中有一个 satisfies
函数可以做到这一点:
semver.satisfies(v, version)
(其中 v
是您缓存中的内容,version
是您要测试的范围,如果 v
满足)