2014-06-15 21 views
6

Tôi đã một ứng dụng, viết bằng Backbone với rối và một số phụ thuộc khác, quản lý thông qua Chòi chơi cho:Bower phụ thuộc override

{ 
    "name": "admin", 
    "version": "0.1.1", 
    "main": "public/javascripts/app.js", 
    "dependencies": { 
    "lodash": "~2.4.1", 
    "console-polyfill": "~0.1.0", 
    "jquery": "~2.1.1", 
    "normalize-css": "~2.1.2", 
    "marionette": "~1.7.4", 
    "bootstrap": "~3.1.1", 
    "font-awesome": "~4.1.0", 
    "backbone-pageable": "~1.4.5", 
    "moment": "~2.5.1", 
    "swag": "~0.6.1", 
    "jquery-form": "~3.46.0", 
    "jquery-file-upload": "~9.5.7", 
    "underscore.string": "~2.3.3", 
    "bootstrap-switch": "~3.0.1", 
    "joint": "~0.9.0" 
    }, 
    "overrides": { 
    "backbone": { 
     "dependencies": { 
     "lodash": "*", 
     "jquery": "*" 
     }, 
     "main": "backbone.js" 
    }, 
    "backbone.wreqr": { 
     "dependencies": { 
     "backbone": "*" 
     }, 
     "main": "lib/amd/backbone.wreqr.js" 
    }, 
    "backbone-pageable": { 
     "dependencies": { 
     "backbone": "*" 
     }, 
     "main": "lib/backbone-pageable.js" 
    }, 
    "jquery-file-upload": { 
     "dependencies": { 
     "jquery": "*" 
     }, 
     "main": [ 
     "js/vendor/jquery.ui.widget.js", 
     "js/jquery.iframe-transport.js", 
     "js/jquery.fileupload.js" 
     ] 
    }, 
    "underscore.string": { 
     "dependencies": { 
     "lodash": "*" 
     }, 
     "main": "lib/underscore.string.js" 
    }, 
    "joint": { 
     "dependencies": { 
     "lodash": "*" 
     }, 
     "main": "dist/joint.clean.js" 
    } 
    }, 
    "resolutions": { 
    "jquery": "~2.1.1" 
    } 
} 

Tôi muốn thêm Joint.js (http://www.jointjs.com/), mà phụ thuộc vào lodash (thay thế cho gạch dưới), nhưng tôi không thể tìm ra cách thay thế cấu hình này, vì Marionette, Backbone và một số thư viện khác phụ thuộc trực tiếp vào gạch dưới. Vì vậy, trên tải trọng gạch dưới ghi đè lodash, và ứng dụng không thể bắt đầu chính xác.

+0

Tại sao bạn không để 'lodash' ghi đè' gạch dưới'? API của họ phải tương thích. – Bergi

+0

Đây là những gì tôi mong đợi, sẽ xảy ra, nhưng gạch dưới khắc phục lodash ở cuối. – mavarazy

+0

Tôi đã thay đổi thứ tự và đặt lodash là phụ thuộc mới nhất và nó hoạt động. Cảm ơn cho một gợi ý :) Tôi sẽ để nhảy này có một cách sạch hơn để làm điều đó, nếu không tôi đang tải cả hai thư viện trên máy khách – mavarazy

Trả lời

4

Tôi đã thay đổi thứ tự và đặt lodash là phụ thuộc mới nhất và nó hoạt động.

Cũng như là một giải pháp có một tùy chọn để có một cái móc Chòi chơi, như nó nói trong sau câu trả lời https://stackoverflow.com/a/23289270/575338

Chúng tôi đã có một tình huống tương tự mà chúng tôi đã có Backbone phụ thuộc vào gạch trong bower.json của nó, nhưng chúng tôi đang sử dụng Lo-Dash thay cho nó, vì vậy Bower đã không cần thiết phải kéo xuống Phần dưới cho mỗi lần cài đặt. Chúng tôi có kiểm tra tự động để tuân thủ giấy phép của bên thứ ba, vì vậy chúng tôi không muốn bất kỳ điều gì chúng tôi không thực sự sử dụng.

Tôi nhận ra đây không phải là chính xác những gì họ đang có nghĩa là cho, nhưng Bower của install-hooks thể được sử dụng để làm sạch không cần thiết DEPS sau cài đặt (ít nhất là cho đến khi Bower được các loại "không nhờ" độ phân giải bạn gợi ý tại). Trong bạn .bowerrc:

{ 
    "directory": "app/bower_components", 
    "scripts": { 
     "postinstall": "rm -rf app/bower_components/underscore" 
    } 
} 

Đó là một chút của một hack, nhưng hoạt động.

+2

Lưu ý rằng từ phiên bản 1.4. của Bower, bạn sẽ có thể thêm mảng ignoreDependencies vào bower.json của mình – gotofritz

Các vấn đề liên quan