我有一个PHP项目,它使用composer作为PHP依赖项,使用bower作为前端依赖项。所以基本上我有一个目录结构,看起来像这样(显然是一个简化的版本):
/app
/bower_components
/public
/vendor
/foo
/bar
/src
bower.json
composer.json
bower.json
composer.json
gulpfile.js
正如您所看到的,php依赖项有一些自己的前端依赖项,这些依赖项也由bower管理。但是,当我从应用程序的根目录运行bower install
时,foo/bar依赖项中的bower文件将被忽略。
我不想提前在foo/bar中构建我的前端依赖项,只想使用gump将它们包含在我的应用程序中,因为foo/bar可能与我的应用有重叠的依赖项(比如jQuery或Bootstrap之类的),我显然不想将它们包含两次。我也更喜欢bower在重叠依赖关系存在版本冲突时抛出错误,而不是必须找出困难的方法。
理想情况下,我所有的前端依赖项都会出现在我的根bower_components目录中,既有来自我应用程序的bower.json的依赖项,也有来自vendor/foo/bar/bower.json。这样,我就可以让gulp将所有这些依赖项编译成一个(或者可能是几个).js和.css文件。
所以问题是,这可能吗我可以让bower查看子目录中的其他bower.json文件吗或者有没有推荐的方法可以在运行bower之前自动合并多个bower.json文件?
我花了最后一个小时在网上搜索这个问题的好解决方案,但我似乎什么都想不出来。(如果你知道关于这个话题的好博客文章或资源,请分享!)谷歌给我的都是一些基本的bower教程,在这里没有太大帮助。我真的是第一个遇到这个问题的人吗?还是我试图解决手头问题的方式有根本性的错误?
解决这个问题的一种方法(也是Symfony CMF现在使用的一种方式)是为您的PHP依赖项创建bower包。这意味着您从捆绑包中创建了一个前端bower包,该包只包含带有依赖项的bower.json
文件。
现在,在应用程序的bower.json
文件中,您可以将这些"虚拟"bower包指定为需求并运行bower install
。例如:
{
"dependencies": {
"php-foobar": "^1.3"
}
}
composer插件composer额外资产和composer资产插件允许向composer.json.添加bower依赖项
composer资产插件是在纯php中实现的,它将bower包转换为composer包。
作曲家extra assets称幕后的"真正的"弓箭手。它是自动安装的(包括所需的nodejs),但如果您的系统上没有它的话。
免责声明:我是作曲家额外资产的作者。