2016-04-25 18 views
5

Bower scheint vom semver spec dass abweichen ich Abhängigkeiten manchmal sehen, die wie folgt aussehen (von 2klic-Winkel/bower.json):Parsing Bowers Semantic Version Syntax

"dependencies": { 
    "angulargrid": "s-yadav/angulargrid#^0.4.0" 
    } 

This question geht ein langer Weg in Richtung Erklärung von semver selbst, aber nicht so sehr, was mit dem s-yadav/angulargrid # Teil passiert.

bei Bower Suchen/lib/node_modules/Lauben Endpunkt-Parser/index.js

ich den folgenden Code sehen:

function decompose(endpoint) { 
    // Note that we allow spaces in targets and sources but they are trimmed 
    var regExp = /^(?:([\w\-]|(?:[\w\.\-]+[\w\-])?)=)?([^\|#]+)(?:#(.*))?$/; 
    var matches = endpoint.match(regExp); 
    var target; 
    var error; 

    if (!matches) { 
     error = new Error('Invalid endpoint: ' + endpoint); 
     error.code = 'EINVEND'; 
     throw error; 
    } 

    target = trim(matches[3]); 

    return { 
     name: trim(matches[1]), 
     source: trim(matches[2]), 
     target: isWildcard(target) ? '*' : target 
    }; 
} 

So scheint es, dass ein Endlager Quelle angegeben werden kann, als Teil der Abhängigkeitsversion unter Verwendung von # als Trennzeichen.

Allerdings konnte ich nichts finden, das dies in der Bower-Dokumentation beschreibt.

Gibt es noch andere Einschränkungen mit Bowers Interpretation von semver oder ist dies die einzige, und ist es ausreichend, die Zeichenfolge auf # zu teilen, um die Anforderung Ausdruck zu finden?

Antwort

1

Sie können den entsprechenden Code in Bower/lib/node_modules/Lauben Endpunkt-Parser/index.js in json2decomposed finden:

function json2decomposed(key, value) { 
    ... 
    key = trim(key); 
    value = trim(value); 
    ... 
    endpoint = key + '='; 
    split = value.split('#').map(trim); 

    // If # was found, the source was specified 
    if (split.length > 1) { 
     endpoint += (split[0] || key) + '#' + split[1]; 
    // Check if value looks like a source 
    } else if (isSource(value)) { 
     endpoint += value + '#*'; 
    // Otherwise use the key as the source 
    } else { 
     endpoint += key + '#' + split[0]; 
    } 

    return decompose(endpoint); 
} 

Also, was wird später die target durch Aufspalten der Wert aus der erzeugt wird, JSON-Abhängigkeitsarray von #. Dieser target wird von einem resolver geparst, so dass das tatsächliche Verhalten von dem verwendeten Resolver abhängt, aber der typische Resolver verwendet node-semver, wenn node-semver es parsen kann. Andernfalls werden Commit-IDs, Branch-Namen, Tags usw. verwendet.

Das Aufteilen der Zeichenkette durch '#' und das anschließende Beschneiden von Leerzeichen genügen, um den Anforderungsausdruck zu finden, aber es kann sich nicht um eine Semver-Version handeln.

+0

Gute Erklärung, danke – andrew