我不确定它是如何工作的,请原谅我的粗略问题。
我在玩棱 Angular 游戏,并注意到 bower 有一些不良行为。我用yeoman创建了我的应用程序,并使用bower进行依赖项管理。 index.html文件中有一部分应由bower管理:

<!-- build:js scripts/vendor.js -->
<!-- bower:js -->
<script src="bower_components/jquery/jquery.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/bootstrap/dist/js/bootstrap.js"></script>
<script src="bower_components/angular-resource/angular-resource.js"></script>
<script src="bower_components/angular-cookies/angular-cookies.js"></script>
<script src="bower_components/angular-sanitize/angular-sanitize.js"></script>
<script src="bower_components/angular-route/angular-route.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
<script src="bower_components/select2/select2.js"></script>
<script src="bower_components/angular-ui-select2/src/select2.js"></script>
<script src="bower_components/angular-ui-tinymce/src/tinymce.js"></script>
<!-- endbower -->

我注意到可传递依赖项未添加到此列表中。例如,angular-ui-tinymce依赖于tinymce。即使tinymce是作为传递依赖项安装的,它也没有包含在index.html文件中,因此我必须自己包含它。但这克服了管理脚本与Bower一起使用的习惯的麻烦(即,如果我卸载angular-tinymce,Bower将删除其脚本,但是我手动添加的tinymce脚本将卡在那里。

可以告诉bower在index.html文件中添加传递依赖吗?还是一个坏主意,应该手工处理?
这里的社区最佳实践是什么

最佳答案

实际上,这是一个名为 grunt-bower-install 的Grunt任务,正在将其插入HTML。它在Gruntfile.js中配置为bower-install,然后可能作为grunt serve的一部分运行。也可以直接调用它:grunt bower-install

只要您安装了Bower组件并将其保存在bower.json中,它将及其匹配项按照与它们之间的关系匹配的顺序注入(inject)到您的HTML中。但是,只有在Bower组件未在其自己的main文件中指定bower.json属性时,这才行不通。

因此,需要明确的是,您有一个bower.json列出了应用程序的依赖项。此外,您在大多数时间列出的每个依赖项都将具有自己的bower.json(列出其依赖项)(如果有的话),以及main属性,该属性告诉grunt-bower-install之类的内容是将哪些文件注入(inject)HTML。一旦这些依赖项之一未能遵循指定main的约定,grunt-bower-install就会失去魔力。

angular-ui-tinymce的情况下,确实确实是list tinymce as a dependency,但是 tinymce 并未配置bower.json文件。因此,没有带有bower.json属性的main来告诉grunt-bower-install要注入(inject)什么文件out of all these

我能看到的最好的选择是像您所说的那样手动写出<script>标记,并在决定不使用它时手动将其删除。最糟糕的是,当grunt-bower-install无法正常工作时,这仍然只是我们这些年来一直习惯的Web开发。 :)

10-05 20:55
查看更多