在上一篇文章中,我们提到了利用Grunt可以完成的内容,其中最主要的功能就是利用各种Node的组件来搭配出一个自动化高亮,自动化运行等的Web前端开发环境。但是Bower也是一个专门来管理各种依赖组件的工具,和Grunt很像。有人在这里就要问了,既然有Grunt了,但是为什么还需要Bower呢?

那么在这里,我说一下Bower的作用:Grunt安装的是node的包,npm安装的也是基于node的包,所以在这方面说来,二者性质大致相同,都会放到package.json中。但是Bower安装的却不是基于node的包,而是基于(css,js等)的包。并且会放在bower.json中。这就是为什么我们要引入Bower的原因,所以二者看起来并不冲突,具体的更多信息可以参考StackOverflow的一篇问答:Difference between Grunt, NPM and Bower ( package.json vs bower.json )

作为twitter的开源项目,bower可以提供添加web包,更新web包,删除web包,发布web包,管理包依赖方面的内容。一般说来,web包通常被认为是由Html+CSS+JavaScript组成的。假如现在我们想创建一个新的网站,需要用到JQuery包,以前的做法一般就是下载一个然后放到项目中去,但是现在我们只需要配置配置bower就可以自动的下载了,下面来说一下步骤 (请确保你已经按照上节的Grunt配置方法,配置好了Grunt环境):

首先,安装bower

在GruntTest目录中运行cmd命令: npm install bower –g,运行成功后,会在GruntTest文件夹中创建一个bower_components的目录和一个bower.json的文件。我们打开bower.json文件,可以看到如下的内容:

{ "name": "grunt-bower-angular-demo",
"version": "0.0.0",
"description": "demo",
"main": "",
"moduleType": [],
"authors": [ "scy" ],
"license": "MIT",
"homepage": "",
"private": true,
"ignore": [ "**/.*", "node_modules", "bower_components", "test", "tests" ],
"dependencies": { "requirejs": "~2.1.20", "jquery": "~2.1.4", "angular": "angularjs#~1.4.6" }
}

其中,name定义了bower管理的名称;version则定义了版本;dependencies节点里面的内容就是我们的包体,我们这时候来运行git cmd并导向到当前文件夹,并输入如下命令: bower install,过一会儿我们就可以看到包都被自动下载到bower_components文件夹中了:

bower还提供了很多有用的命令,可以让我们很方便的来管理各种包:

  • cache      :bower缓存管理
  • help         :显示Bower命令的帮助信息
  • home      :通过浏览器打开一个包的github发布页
  • info          :查看包的信息
  • init           :创建bower.json文件
  • install       :安装包到项目
  • link           :在本地bower库建立一个项目链接
  • list            :列出项目已安装的包
  • lookup    :根据包名查询包的URL
  • prune      :删除项目无关的包
  • register  :注册一个包
  • search     :搜索包
  • update    :更新项目的包
  • uninstall  :删除项目的包

假如说现在我们不想用JQuery2.1.4的包,而想换成JQuery2.0的包,那么我们只需要在dependencies中更改一下,然后利用bower update命令运行一下即可。

运行完毕,我们打开JQuery的版本就可以看到,JQuery2.0.3的包已经被自动的下载下来了。真的非常方便。

如果我们想把JQuery库从当前目录中卸载,我们只需要运行 bower uninstall jquery,那么我们就会发现bower自动会将jquery库移除的。但是需要注意的是,在dependencies节点中,jquery的节点并没有自动的给移除掉,这将会导致以后再prod上部署的时候,全局安装这些dependencies的时候,jquery仍然会被安装回来,这是需要注意的一个地方。

还有需要注意的地方就是,如果bower.json中,dependencies中有两个版本的同一组件,bower将会以最后一个组件为准:

"dependencies":
{ "requirejs": "~2.1.20",
"jquery": "~2.1.4", "jquery": "~2.0.3",
"angular": "angularjs#~1.4.6"
}

如上所示,bower将会安装jquery2.0.3的版本而忽略掉jquery2.1.4的版本。

接下来,我们也许会问,当系统中存在一个高版本的包, 但是又安装了一个低版本的包,如何解决冲突呢?

我们首先安装一个bootstrap的v3版本,它依赖于jquery1.9.1以上的版本才能正常运行。然后我们在bower.json中配置jquery的版本为jquery1.4.4版本,认为制造兼容性问题,看看bower怎么处理的。bower.json内容如下:

"dependencies":
{
"requirejs": "~2.1.20",
"jquery": "~1.4.4", "angular":
"angularjs#~1.4.6", "bootstrap":"~3.*"
}

然后运行bower install看看,结果如下:

从上图中我们可以看到,bower能检测到版本依赖的兼容性问题,从而正确的进行处理。

有人会问,bower.json里面的数据总是自己配置的吗? 其实不是的,我们可以使用bower init命令来一步一步的填充它,具体的效果大家可以自己试一试。当填充完毕,bower.json就可以自动的生成出来了,无需每次手动拷贝。

最后说一下发布的问题,其实在发布的时候,bower的components是无需打包进去的,可以全部删掉,然后再服务器端直接安装也是可以的。

这篇文章到这里就完结了,讲解很粗略,希望能抛砖引玉,看到更加好的,更加漂亮的讲解出来。

前端见微知著工具篇:Bower组件管控的更多相关文章

  1. 前端见微知著工具篇:Grunt实现自动化

    转载说明 本篇文章为转载文章,来源为[前端福利]用grunt搭建自动化的web前端开发环境-完整教程,之所以转载,是因为本文写的太详细了,我很想自己来写,但是发现跳不出这篇文章的圈子,因为写的详尽,所 ...

  2. [工具]前端自动化工具grunt+bower+yoman

    安装过程 安装nodejs 安装grunt,bower,yoeman 命令:(-g 表示全局安装,否则安装到当前目录下) npm install -g grunt-cli npm install -g ...

  3. 前端总结·基础篇·CSS(一)布局

    目录 这是<前端总结·基础篇·CSS>系列的第一篇,主要总结一下布局的基础知识. 一.显示(display) 1.1 盒模型(box-model) 1.2 行内元素(inline) &am ...

  4. 前端总结·基础篇·CSS(二)视觉

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·CSS(四)兼容 目录 一.动画(animation)(IE ...

  5. 前端总结·基础篇·CSS(三)补充

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 目录 一.移动端 1.1 视口(viewport) 1.2 媒体查询(medi ...

  6. 前端总结·基础篇·JS(一)五大数据类型之字符串(String)

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(二)补充 前端总结·基础篇·JS(一)五大数据类型之字符串(String) 目录 这是& ...

  7. 前端总结·基础篇·JS(二)数组深拷贝、去重以及字符串反序和数组(Array)

    目录 这是<前端总结·基础篇·JS>系列的第二篇,主要总结一下JS数组的使用.技巧以及常用方法. 一.数组使用 1.1 定义数组 1.2 使用数组 1.3 类型检测 二.常用技巧 2.1 ...

  8. 前端总结·基础篇·JS(三)arguments、callee、call、apply、bind及函数封装和构造函数

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...

  9. 前端总结·基础篇·JS(四)异步请求及跨域方案

    前端总结系列 前端总结·基础篇·CSS(一)布局 前端总结·基础篇·CSS(二)视觉 前端总结·基础篇·CSS(三)补充 前端总结·基础篇·JS(一)原型.原型链.构造函数和字符串(String) 前 ...

随机推荐

  1. Photo Shop 设置

    1. 编辑 > 首选项 > 单位与标尺 2. 面板 在『窗口』 菜单下开启: 工具 选项 信息(F8) 图层(F7) 历史记录 可以将设置好的面板保存下来,这样下次别人弄乱了你的面板后,你 ...

  2. OSGI入门笔记

    OSGI框架为Java定义了一个动态模块化系统,它使你可以更好地控制代码结构,动态管理代码的生命周期,并且提供了代码写作的松耦合方式:更值得称道的是,它的规范文档描述详尽.--<OSGI实战&g ...

  3. Linux Found a swap file by the name filename

    在Linux中使用vi命令编辑mysql_backup.sh时遇到下面提示信息 E325: ATTENTION Found a swap file by the name ".mysql_b ...

  4. DataTable转换为Json格式

    private string DataTableToJson(DataTable dt) { string Json = ""; Json = Json + "[&quo ...

  5. spring之依赖注入

  6. 使用Spring MVC 实现 国际化

    使用Spring MVC 实现 国际化     博客分类: Spring   1. 版本 Spring 3.1   2. 配置 LocaleResolver     LocaleResolver 是指 ...

  7. 通过SecureCRT访问亚马逊Amazon EC2主机

    亚马逊推出了免费的云主机服务器 Amazon EC2,它是通过安全密钥来访问主机的. 问题是下载的密钥在SecureCRT 上无法直接使用,需要转换. 下面的方法可以在自己的linux主机上生成sec ...

  8. JustWeEngine - 轻量级游戏框架

    JustWeEngine - 轻量级游戏框架 An easy open source Android game engine. Github地址 引擎核心类流程图 使用方法 引入Engine作为Lib ...

  9. 《数据结构》之串的模式匹配算法——KMP算法

    //串的模式匹配算法 //KMP算法,时间复杂度为O(n+m) #include <iostream> #include <string> #include <cstri ...

  10. NOIP2012借教室[线段树|离线 差分 二分答案]

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要 向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自 ...