NPM semver分辨率

时间:2019-01-10 17:34:21

标签: npm semantic-versioning

我是npm的新手,我需要获取指定软件包和semver的所有可能版本的列表。与npm semver计算器所做的类似。例如:带有输入数据:包:磁带,semver:“〜2.10.1”,结果应为:[2.10.1,2.10.2,2.10.3]。 您能否推荐如何获得此信息。理想情况下,我需要在python中使用它。谢谢!

1 个答案:

答案 0 :(得分:0)

这在节点中可能会更容易,因为使用semver软件包。我找到了semantic_version python程序包,但不适用于所有ranges(即1.x),但涵盖了其中的大部分,包括caret和{{3} }范围。

import requests
from semantic_version import Spec, Version

def get_npm_versions(package, range):
    # Make get request to npm registry for given package
    response = requests.get('https://registry.npmjs.org/%s'%(package))

    # Check for good response
    if response.status_code == 200:
        # Parse response
        data = response.json()
        # Convert unicode to strings
        versions = map(str, data['versions'].keys())
        # Convert strings to `Version`s
        versions = map(Version, versions)
        # Create range `Spec`
        range_spec = Spec(range)

        return range_spec.filter(versions)
    else:
        raise Exception('NPM registry not reachable :(')

# Use function with to get `tape@~2.10.1`
versions = get_npm_versions('tape', '~2.10.1')

for v in versions:
    print v