以自动方式合并多个bower.json依赖项

时间:2014-11-24 20:55:42

标签: javascript build dependencies gulp bower

我遇到了bower的复杂架构问题。我正在构建一个在线平台,用户使用包含JS代码的动态小部件创建页面。这些小部件具有预定义的格式,描述,图标等,它们将打包成存档(如apk,战争,jar,耳朵,但前端代码)。用户将能够在已部署网站时动态添加小部件。

我们正在使用bower,问题如下:小部件也应该能够指定其bower依赖项。

简化的目录布局如下:

  • bower.json
  • gulpfile.js(用于网站建设)
  • bower_components#来自所有小部件的我们自己的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规范变体,例如<=。我也可以强制widget-writer使用我自己的依赖规范,但我想不出如何设计它。

感谢任何帮助!

接受了小部件依赖解决方案的其他方法,但请注意:他们不能拥有自己的lib版本,因为在运行时会加载多个小部件。我不能同时拥有两个jqueries,例如,因为两个小部件使用上面示例中的规范。

UPD:我知道RequireJS,我实际上正在使用它。但是,首先,我需要自己下载依赖项,以便以后可以将它与RequreJS一起使用。

2 个答案:

答案 0 :(得分:2)

解决方案如下:

每个小部件本身都是一个凉亭包,它的bower.json;该项目的bower.json被重命名为bower-base.json,bower.json是从bower-base.json生成的,所有小部件都添加到了dependencies属性中。然后bower自动处理小部件的依赖。

答案 1 :(得分:0)

这是否有理由必须用凉亭完成? Bower并非真正用于运行时依赖性。为此你想使用像RequireJS这样的东西。