2016-04-25 11 views
5

Бауэр, кажется, отклоняться от semver spec в том, что я иногда вижу зависимости, которые выглядят следующим образом (от 2klic-угловой/bower.json):PARSING Бауэра Семантический версия Синтаксис

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

This question проходит долгий путь к объяснению самого семвера, но не столько о том, что происходит с участком s-yadav/angulargrid #.

Глядя на даче/Библиотека/node_modules/Беседка-конечная точка-анализатор/index.js

Я вижу следующий код:

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 
    }; 
} 

Таким образом, кажется, что источник хранилища может быть указан как часть версии зависимости с использованием # в качестве разделителя.

Однако я не смог найти ничего, что описывает это в документах bower.

Есть ли какие-либо другие оговорки, которые необходимо знать с интерпретацией семенников Bowers или это единственное, и достаточно ли разбить строку на #, чтобы найти выражение требования?

ответ

1

Вы можете найти соответствующий код в беседке/Lib/node_modules/Беседки-конечная точка-анализатор/index.js в json2decomposed:

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); 
} 

Так что позже становится target генерируется путем разделения значения из JSON на #. Этот target анализируется resolver, поэтому фактическое поведение зависит от используемого преобразователя, но типичный преобразователь использует node-semver, если узел-семер может его проанализировать. В противном случае он использует идентификаторы фиксации, имена ветвей, теги и т. Д.

Таким образом, разделение строки на ## и обрезка пробелов после этого достаточно, чтобы найти выражение требований, но в конце концов это может быть не версия semver.

+0

Хорошее объяснение, спасибо – andrew

 Смежные вопросы

  • Нет связанных вопросов^_^