2016-04-25 12 views
5

Bower dường như đi chệch khỏi semver spec ở chỗ đôi khi tôi thấy phụ thuộc mà giống như thế này (từ 2klic-góc/bower.json):Parsing Bower của

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

This question đi một chặng đường dài hướng tới giải thích bản thân semver nhưng không quá nhiều thứ đang diễn ra với phần s-yadav/angulargrid #.

Nhìn vào Chòi/lib/node_modules/Chòi-endpoint-phân tích cú pháp/index.js

Tôi thấy đoạn mã sau:

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

Vì vậy, có vẻ như một nguồn kho có thể được xác định như một phần của phiên bản phụ thuộc sử dụng # làm dấu phân cách.

Tuy nhiên tôi không thể tìm thấy bất kỳ điều gì mô tả điều này trong tài liệu hướng dẫn.

Có bất kỳ cảnh báo nào khác cần lưu ý với Bowers giải thích semver hoặc là duy nhất, và là nó đủ để chia chuỗi tại # để tìm biểu thức yêu cầu?

Trả lời

1

Bạn có thể tìm mã có liên quan trong/lib/node_modules/Chòi-endpoint-phân tích cú pháp/index.js Chòi chơi trong 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); 
} 

Vì vậy, những gì sau này trở thành các target được tạo ra bằng cách chia giá trị từ Mảng phụ thuộc JSON theo #. target được phân tích cú pháp theo số resolver, do đó, hành vi thực tế phụ thuộc vào trình phân giải được sử dụng, nhưng trình giải quyết thông thường sử dụng node-semver, nếu nút-semver có thể phân tích cú pháp. Nếu không, nó sẽ sử dụng các thẻ cam kết, tên chi nhánh, thẻ, v.v.

Vì vậy, tách chuỗi bằng '#' và khoảng trắng cắt sau là đủ để tìm biểu thức yêu cầu, nhưng nó có thể không phải là phiên bản semver.

+0

Giải thích tốt, cảm ơn bạn – andrew