2014-11-24 49 views
4

我有一個複雜的建築問題bower。我正在構建一個在線平臺,用戶使用包含JS代碼的動態小部件創建頁面。這些小部件具有預定義的格式,描述,圖標等,它們將打包成檔案(如apk,War's,jar's,ear's,但帶有前端代碼)。當網站已經部署時,用戶將能夠動態添加小部件。合併多個bower.json依賴於自動化的方式

我們使用的是bower,問題如下:小部件還應該能夠指定它們的bower依賴關係。

簡化的目錄佈局如下:(用於網站建設)

  • bower_components

    • bower.json
    • gulpfile.js#從所有的部件
    • 部件我們自己DEPS + DEPS
      • widget1#這裏可能有任何名字
      • widget2
      • 插件隨機
      • 另一個窗口小部件#對於每個佈局上方的部件是相同的
        • bower.json(或簡化版本等dependencies.json僅包含依存列表)。
        • 許多其他文件

    插件上傳完畢後bower.json應與其他部件全部DEPS合併,gulp build將運行並重建了整個事情。

    如何合併所有bower.json的到一個單一的一個?尤其是當兩次具有相同的相關性時,例如,一個小工具取決於"jquery": "<=2.1.0",另一個小工具取決於"jquery": "^2.1.0"。它們都是兼容的,但是我在bower.json中寫什麼字符串?如果我只寫第二個bower,並且會安裝最新的jquery - 2.1.1,它已經與第一個小部件不兼容。這是一個更簡單的用例。

    事實上,我們可以假設,會有每個可能semver規格的變化,像<=例如。我也可以強制小部件編寫者使用我自己的依賴規範,但我無法考慮如何設計它。

    任何幫助表示讚賞!

    其他上前爲小部件依賴的解決方案被接受,但請注意:他們無法有他們,因爲在運行多個小部件庫中自己的版本被加載。例如,我不能一次擁有兩個jquery,只是因爲兩個小部件使用了上述示例中的規格。

    UPD:我知道RequireJS,我真正使用它。但是,首先,我需要自行下載依賴關係,以便稍後在RequreJS中使用它。

  • 回答

    2

    的解決方案是以下內容:

    每個插件本身是一個涼亭包與它的bower.json;該項目的bower.json被重命名爲bower-base.json,而bower.json則是從bower-base.json生成的,所有的小部件都被添加到依賴項屬性中。然後,bower會自動處理小部件的依賴關係。

    +0

    我是新來的涼亭。請您詳細解釋一下可能的例子,以便我們受益。謝謝! – pankajt 2016-04-24 17:55:37

    +0

    解決方案是,每個小部件本身就是一個涼亭包。主項目的bower.json依賴於每個小部件。 – 2016-04-24 17:57:42

    +0

    您的主項目可能會動態選擇小部件包括WIDGET1,WIDGET2而不是WIDGET3不修改bower.json每次 – pankajt 2016-04-24 18:00:53

    0

    是否有一個原因,這必須與亭子呢? Bower並非真正用於運行時依賴。爲此,您要使用類似RequireJS的東西。

    +0

    呵呵,好了,我已經使用了RequireJS!但是,我如何首先下載依賴項,以便我可以在RequireJS中使用它? – 2014-11-24 21:09:21

    +0

    哦,我明白你在說什麼了。這樣如何:如果你創建一個bower.json(和bower_components目錄)文件爲每個插件(並將其放置在子目錄與所述小部件),然後把一個任務在主bower.json文件涼亭運行安裝在那些是什麼目錄? – Jaybill 2014-11-24 21:24:26

    +0

    正如我在這個問題解釋說這不是完全可能 - 如果兩個小部件依賴於jQuery的,我會最終達到一次同時加載兩個jqueries。這顯然是一個問題。 – 2014-11-24 21:28:03