我遇到了bower
的复杂架构问题。我正在构建一个在线平台,用户使用包含JS代码的动态小部件创建页面。这些小部件具有预定义的格式,描述,图标等,它们将打包成存档(如apk,战争,jar,耳朵,但前端代码)。用户将能够在已部署网站时动态添加小部件。
我们正在使用bower
,问题如下:小部件也应该能够指定其bower
依赖项。
简化的目录布局如下:
上传小部件后,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一起使用。答案 0 :(得分:2)
解决方案如下:
每个小部件本身都是一个凉亭包,它的bower.json;该项目的bower.json被重命名为bower-base.json,bower.json是从bower-base.json生成的,所有小部件都添加到了dependencies属性中。然后bower自动处理小部件的依赖。
答案 1 :(得分:0)
这是否有理由必须用凉亭完成? Bower并非真正用于运行时依赖性。为此你想使用像RequireJS这样的东西。