从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发。Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎。chrome浏览器就基于V8,同时打开20-30个网页都很流畅。Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低。非常适合小型网站,个性化网站,我们自己的Geek网站!!
关于作者
- 张丹(Conan), 程序员Java,R,PHP,Javascript
- weibo:@Conan_Z
- blog: http://blog.fens.me
- email: bsspirit@gmail.com
转载请注明出处:
http://blog.fens.me/nodejs-bower-intro/
前言
一个新的web项目开始,我们总是很自然地去下载需要用到的js类库文件,比如jQuery,去官网下载名为jquery-1.10.2.min.js文件,放到我们的项目里。当项目又需要bootstrap的时候,我们会重复刚才的工作,去bootstrap官网下载对应的类库。如果bootstrap所依赖的jQuery并不是1.10.2,而是2.0.3时,我们会再重新下载一个对应版本的jQuery替换原来的。
包管理是个复杂的问题,我们要知道谁依赖谁,还要明确哪个版本依赖哪个版本。这些对于开发人员来说,负担过重了。bower作为一个js依赖管理的工具,提供一种理想包管理方式,借助了npm的一些思想,为我们提供一个舒服的开发环境。
你要还不动起手来试试bower,那你一定不会知道,前端开发是件多么享受的事。
目录
- bower介绍
- bower安装
- bower命令
- bower使用
- 用bower提交自己类库
1. bower介绍
Bower 是 twitter 推出的一款包管理工具,基于nodejs的模块化思想,把功能分散到各个模块中,让模块和模块之间存在联系,通过 Bower 来管理模块间的这种联系。
包管理工具一般有以下的功能:
- 注册机制:每个包需要确定一个唯一的 ID 使得搜索和下载的时候能够正确匹配,所以包管理工具需要维护注册信息,可以依赖其他平台。
- 文件存储:确定文件存放的位置,下载的时候可以找到,当然这个地址在网络上是可访问的。
- 上传下载:这是工具的主要功能,能提高包使用的便利性。比如想用 jquery 只需要 install 一下就可以了,不用到处找下载。上传并不是必备的,根据文件存储的位置而定,但需要有一定的机制保障。
- 依赖分析:这也是包管理工具主要解决的问题之一,既然包之间是有联系的,那么下载的时候就需要处理他们之间的依赖。下载一个包的时候也需要下载依赖的包。
功能介绍,摘自文章:http://chuo.me/2013/02/twitter-bower.html
2. bower安装
bower插件是通过npm, Node.js包管理器安装和管理的.
我的系统环境
- win7 64bit
- Nodejs:v0.10.5
- Npm:1.2.19
~ D:\workspace\javascript>node -v
v0.10.5
~ D:\workspace\javascript>npm -v
1.2.19
在系统中,我们已经安装好了Nodejs和npm。win7安装nodejs请参考文章:Nodejs开发框架Express3.0开发手记–从零开始
安装bower
全局安装bower
~ D:\workspace\javascript>npm install bower -g
新建一个express3的项目nodejs-bower
~ D:\workspace\javascript>express -e nodejs-bower
~ D:\workspace\javascript>cd nodejs-bower && npm install
3. bower命令
bower安装后,我们就可以用bower这个命令了。
~ D:\workspace\javascript\nodejs-bower>bower
Usage:
bower [] []
Commands:
cache Manage bower cache
help Display help information about Bower
home Opens a package homepage into your favorite browser
info Info of a particular package
init Interactively create a bower.json file
install Install a package locally
link Symlink a package folder
list List local packages
lookup Look up a package URL by name
prune Removes local extraneous packages
register Register a package
search Search for a package by name
update Update a local package
uninstall Remove a local package
Options:
-f, --force Makes various commands more forceful
-j, --json Output consumable JSON
-l, --log-level What level of logs to report
-o, --offline Do not hit the network
-q, --quiet Only output important information
-s, --silent Do not output anything, besides errors
-V, --verbose Makes output more verbose
--allow-root Allows running commands as root
See 'bower help ' for more information on a specific command.
Commands,列出了bower支持的各种命令。
- cache:bower缓存管理
- help:显示Bower命令的帮助信息
- home:通过浏览器打开一个包的github发布页
- info:查看包的信息
- init:创建bower.json文件
- install:安装包到项目
- link:在本地bower库建立一个项目链接
- list:列出项目已安装的包
- lookup:根据包名查询包的URL
- prune:删除项目无关的包
- register:注册一个包
- search:搜索包
- update:更新项目的包
- uninstall:删除项目的包
4. bower使用
1). 安装jQuery到项目nodejs-bower
~ D:\workspace\javascript\nodejs-bower>bower install jquery
bower jquery#* not-cached git://github.com/components/jquery.git#*
bower jquery#* resolve git://github.com/components/jquery.git#*
bower jquery#* download https://github.com/components/jquery/archive/2.0.3.tar.gz
bower jquery#* extract archive.tar.gz
bower jquery#* resolved git://github.com/components/jquery.git#2.0.3
bower jquery#~2.0.3 install jquery#2.0.3
jquery#2.0.3 bower_components\jquery
通过执行命令,我们可以看到jQuery的最新版本被下载,并安装到项目的bower_components\jquery目录
查看bower_components/jquery目录,发现了3个文件。
~ D:\workspace\javascript\nodejs-bower>ls bower_components/jquery -a
. .. .bower.json component.json jquery.js
同样地,我们的项目还需要d3的类库
~ D:\workspace\javascript\nodejs-bower>bower install d3
bower d3#* not-cached git://github.com/mbostock/d3.git#*
bower d3#* resolve git://github.com/mbostock/d3.git#*
bower d3#* download https://github.com/mbostock/d3/archive/v3.2.8.tar.gz
bower d3#* extract archive.tar.gz
bower d3#* resolved git://github.com/mbostock/d3.git#3.2.8
bower d3#~3.2.8 install d3#3.2.8
d3#3.2.8 bower_components\d3
非常方便,下载并安装完成!
2). 查看项目中已导入的类库
~ D:\workspace\javascript\nodejs-bower>bower list
bower check-new Checking for new versions of the project dependencies..
nodejs-bower#0.0.0 D:\workspace\javascript\nodejs-bower
├── d3#3.2.8
└── jquery#2.0.3
3). 安装bootstrap库,并查看依赖情况
~ D:\workspace\javascript\nodejs-bower>bower install bootstrap
bower bootstrap#* cached git://github.com/twbs/bootstrap.git#3.0.0-rc1
bower bootstrap#* validate 3.0.0-rc1 against git://github.com/twbs/bootstrap.git#*
bower jquery#>= 1.9.0 cached git://github.com/components/jquery.git#2.0.3
bower jquery#>= 1.9.0 validate 2.0.3 against git://github.com/components/jquery.git#>= 1.9.0
bower bootstrap#~3.0.0-rc1 install bootstrap#3.0.0-rc1
bootstrap#3.0.0-rc1 bower_components\bootstrap
└── jquery#2.0.3
~ D:\workspace\javascript\nodejs-bower>bower list
bower check-new Checking for new versions of the project dependencies..
nodejs-bower#0.0.0 D:\workspace\javascript\nodejs-bower
├─┬ bootstrap#3.0.0-rc1 extraneous
│ └── jquery#2.0.3
├── d3#3.2.8
└── jquery#2.0.3
我们发现bootstrap,对jquery是有依赖的。
4). 删除jQuery库,破坏依赖关系
~ D:\workspace\javascript\nodejs-bower>bower uninstall jquery
bower conflict bootstrap depends on jquery
Continue anyway? (y/n) y
bower uninstall jquery
~ D:\workspace\javascript\nodejs-bower>bower list
bower check-new Checking for new versions of the project dependencies..
nodejs-bower#0.0.0 D:\workspace\javascript\nodejs-bower
├─┬ bootstrap#3.0.0-rc1 extraneous
│ └── jquery missing
├── d3#3.2.8
└── jquery missing
5). 安装低版本的jQuery,制造不版本兼容
~ D:\workspace\javascript\nodejs-bower>bower install jquery#1.7.2
bower jquery#~2.0.3 cached git://github.com/components/jquery.git#2.0.3
bower jquery#~2.0.3 validate 2.0.3 against git://github.com/components/jquery.git#~2.0.3
bower jquery#>= 1.9.0 cached git://github.com/components/jquery.git#2.0.3
bower jquery#>= 1.9.0 validate 2.0.3 against git://github.com/components/jquery.git#>= 1.9.0
bower jquery#1.7.2 cached git://github.com/components/jquery.git#1.7.2
bower jquery#1.7.2 validate 1.7.2 against git://github.com/components/jquery.git#1.7.2
Unable to find a suitable version for jquery, please choose one:
1) jquery#1.7.2 which resolved to 1.7.2
2) jquery#~2.0.3 which resolved to 2.0.3 and has nodejs-bower as dependants
3) jquery#>= 1.9.0 which resolved to 2.0.3 and has bootstrap#3.0.0-rc1 as dependants
Prefix the choice with ! to persist it to bower.json
Choice: 1
bower jquery#1.7.2 install jquery#1.7.2
jquery#1.7.2 bower_components\jquery
~ D:\workspace\javascript\nodejs-bower>bower list
bower check-new Checking for new versions of the project dependencies..
nodejs-bower#0.0.0 D:\workspace\javascript\nodejs-bower
├─┬ bootstrap#3.0.0-rc1 extraneous
│ └── jquery#1.7.2 incompatible with >= 1.9.0 (2.0.3 available)
├── d3#3.2.8
└── jquery#1.7.2 incompatible with ~2.0.3 (2.0.3 available)
我们可以清楚的看到bower,很明确的告诉了我们,jquery和bootstrap是不兼容的,强大之处大家应该有所体会。
6).升级jQuery,让版本兼容
~ D:\workspace\javascript\nodejs-bower>bower update jquery
bower jquery#~2.0.3 cached git://github.com/components/jquery.git#2.0.3
bower jquery#~2.0.3 validate 2.0.3 against git://github.com/components/jquery.git#~2.0.3
bower jquery#>= 1.9.0 cached git://github.com/components/jquery.git#2.0.3
bower jquery#>= 1.9.0 validate 2.0.3 against git://github.com/components/jquery.git#>= 1.9.0
bower jquery#~2.0.3 install jquery#2.0.3
jquery#2.0.3 bower_components\jquery
~ D:\workspace\javascript\nodejs-bower>bower list
bower check-new Checking for new versions of the project dependencies..
nodejs-bower#0.0.0 D:\workspace\javascript\nodejs-bower
├─┬ bootstrap#3.0.0-rc1 extraneous
│ └── jquery#2.0.3
├── d3#3.2.8
└── jquery#2.0.3
多么智能,一键搞定,这才是高效的开发。
7). 查看本地bower已经缓存的类库
~ D:\workspace\javascript\nodejs-bower>bower cache list
bootstrap=git://github.com/twbs/bootstrap.git#3.0.0-rc1
d3=git://github.com/mbostock/d3.git#3.2.8
jquery=git://github.com/components/jquery.git#1.7.2
jquery=git://github.com/components/jquery.git#2.0.3
8). 查看D3库信息
~ D:\workspace\javascript\nodejs-bower>bower info d3
d3
Versions:
- 3.2.8
- 3.2.7
- 3.2.6
- 3.2.5
- 3.2.4
- 3.2.3
...
9). 查看dojo库的url
~ D:\workspace\javascript\nodejs-bower>bower lookup dojo
dojo git://github.com/dojo/dojo.git
10). 用浏览器打开dojo的发布主页
~ D:\workspace\javascript\nodejs-bower>bower home dojo
bower dojo#* not-cached git://github.com/dojo/dojo.git#*
bower dojo#* resolve git://github.com/dojo/dojo.git#*
bower dojo#* download https://github.com/dojo/dojo/archive/1.9.1.tar.gz
bower dojo#* extract archive.tar.gz
bower dojo#* resolved git://github.com/dojo/dojo.git#1.9.1
浏览器自动打开:https://github.com/dojo/dojo
11). 查询包含dojo的类库
~ D:\workspace\javascript\nodejs-bower>bower search dojo
Search results:
dojo git://github.com/dojo/dojo.git
dojox git://github.com/dojo/dojox.git
dojo-util git://github.com/dojo/util.git
dojo-bootstrap git://github.com/samvdb/Dojo-Bootstrap
真是方便实用的技术。
5. 用bower提交自己类库
1). 生成bower.json配置文件
~ D:\workspace\javascript\nodejs-bower>bower init
bower existing The existing bower.json file will be used and filled in
[?] name: nodejs-bower
[?] version: 0.0.0
[?] main file:
[?] set currently installed components as dependencies? No
[?] add commonly ignored files to ignore list? Yes
查看生成的文件bower.json
{
"name": "nodejs-bower",
"version": "0.0.0",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"test",
"tests"
],
"dependencies": {
"d3": "git://github.com/mbostock/d3.git#~3.2.8",
"jquery": "git://github.com/components/jquery.git#~2.0.3"
}
}
2). 在github创建一个资源库:nodejs-bower
3). 本地工程绑定github
~ D:\workspace\javascript\nodejs-bower>git init
Initialized empty Git repository in D:/workspace/javascript/nodejs-bower/.git/
~ D:\workspace\javascript\nodejs-bower>git add .
~ D:\workspace\javascript\nodejs-bower>git commit -m "first commit"
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# app.js
# bower.json
# bower_components/
# node_modules/
# package.json
# public/
# routes/
# views/
nothing added to commit but untracked files present (use "git add" to track)
~ D:\workspace\javascript\nodejs-bower>git remote add origin https://github.com/bsspirit/nodejs-bower
~ D:\workspace\javascript\nodejs-bower>git push -u origin master
Counting objects: 565, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (516/516), done.
Writing objects: 100% (565/565), 803.08 KiB, done.
Total 565 (delta 26), reused 0 (delta 0)
To https://github.com/bsspirit/nodejs-bower
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
4). 注册到bower官方类库
~ D:\workspace\javascript\nodejs-bower>bower register nodejs-bower git@github.com:bsspirit/nodejs-bower.git
bower convert Converted git@github.com:bsspirit/nodejs-bower.git to git://github.com/bsspirit/n
odejs-bower.git
bower nodejs-bower#* resolve git://github.com/bsspirit/nodejs-bower.git#*
bower nodejs-bower#* checkout master
bower nodejs-bower#* resolved git://github.com/bsspirit/nodejs-bower.git#af3ceaac07
Registering a package will make it visible and installable via the registry (https://bower.herokuapp.com), continue? (y/
n) y
bower nodejs-bower register git://github.com/bsspirit/nodejs-bower.git
Package nodejs-bower registered successfully!
All valid semver tags on git://github.com/bsspirit/nodejs-bower.git will be available as versions.
To publish a new version, you just need release a valid semver tag.
Run bower info nodejs-bower to list the package versions.
5). 查询我们自己的包
D:\workspace\javascript\nodejs-bower>bower search nodejs-bower
Search results:
nodejs-bower git://github.com/bsspirit/nodejs-bower.git
6). 安装我们自己的包
D:\workspace\javascript\nodejs-bower>bower install nodejs-bower
bower nodejs-bower#* cached git://github.com/bsspirit/nodejs-bower.git#af3ceaac07
bower nodejs-bower#* validate af3ceaac07 against git://github.com/bsspirit/nodejs-bower.git#*
bower nodejs-bower#* install nodejs-bower#af3ceaac07
nodejs-bower#af3ceaac07 bower_components\nodejs-bower
├── d3#3.2.8
└── jquery#2.0.3
其实模块化,版本依赖,开发类库,发布类库,安装类库,都是一条命令!还能再简单一点么!快把项目模块化,然后分享给大家吧!!未来是属于开发者的。
[…] bower:请参考,bower解决js的依赖管理 […]
[…] 安装jasmine类库时,让我们利用bower,一键搞定。bower的使用介绍,请参考文章:bower解决js的依赖管理。把已经学到的知识用起来,效率马上提升10倍。 […]
[…] 依赖的JS库类,包括jquery,ng-table,可以自己手动下载配置到项目,也可以通过bower自动安装到项目中, bower的介绍,请参考:bower解决js的依赖管理 […]
感谢楼主的分享,非常受用。
有一个小问题,可能初学者会需要。bower是要依赖git的,所以本地需要安装git,并且正确的配置环境变量。
是的!在本地环境需要提前安装好git。
win安装git: 可以用msysgit,下载exe安装文件
Linux ubuntu安装git: apt-get install git
你好,具体怎么弄呢,环境变量什么的都已经设了,还是不行
电脑重启了吗?
[…] 我们通过bower来下载highchart库,有关bower的安装和使用,请参考文章:bower解决js的依赖管理 […]
运行bower install jquery时,总是报bower retry Request to https://bower.herokuapp.com/packages/jquery faile
d with ETIMEDOUT,没有找到解决方案,请问这是什么问题?
你检查你的网络,是不是能正常访问github
可以正常访问。
bower是完全依赖于github的,http协议或者git协议
多谢,问题已经解决,我没有设置gitproxy。
🙂
设了代理,还是没用
? 本地安装了git客户端没有?
装了,用的Git Bash这个东西吗~我是在装angular-phonecat这个官方种子项目的时候,进行到npm install安装依赖时出现的这个etimedout错
npm的源,中国有时候不稳定。
你好,请问你如何解决这问题的
== 没解决,我到现在没用bower成功操作过任何东西~好像是我公司电脑的某些防火墙配置之类的问题
oo,谢谢
偶然间搞定了,在.bowerrc中设下代理:{
“proxy”:”http://:”,
“https-proxy”:”http://:”
}
看来还是网络访问github的问题
请问,国内有啥好的bower代理么
bower完全是依赖于github吧,主要是看你到github的接入速度。
我也遇到相同的问题,如何设置gitproxy?
修改 .bowerrc 文件
{
“proxy”: “http://proxy.mysite.com:8080”,
“https-proxy”: “http://proxy.mysite.com:8080”
}
感谢~
🙂
[…] 接下来,我要通过bower来安装Angularjs和Bootstrap,以及其他依赖的前端库。关于bower的详细使用,请参考文章:bower解决js的依赖管理 […]
很详细,适合新手!
🙂
如何先初始化了bower.json文件:bower init。 后续有包要加入,想自动写入到bower.json里。可以在安装包时添加save参数: bower install packagename –save .
刚好遇到这个问题,正解!
[…] bower, […]
[…] 实现文档中的效果,我们可以快速创建一个静态的HTML的项目,创建细节不多解释,参考文章: 快速搭建Web环境 Angularjs + Express3 + Bootstrap3,bower解决js的依赖管理 […]
请问bower是否可以安装两个版本的jquery,1.7.2版一直在用,而且兼容性是最好的,但bootstrap最低也要jquery1.9.0版,请问是否可以既安装1.7.2版又可以安装2.0版?
一个项目只能安装一个版本的同名的库。
#1.2
#~1.2.3
#^1.2.3
#>=1.2.3 <2.0
这种版本号各是什么意思
这里有解释,一共16条规则
https://docs.npmjs.com/files/package.json
version Must match version exactly
>version Must be greater than version
>=version etc
<version
=version1 <=version2.
range1 || range2 Passes if either range1 or range2 are satisfied.
git… See 'Git URLs as Dependencies' below
user/repo See 'GitHub URLs' below
tag A specific version tagged and published as tag See npm-tag(1)
path/path/path See Local Paths below
mark
正在学习中~ 有个最简单的问题请教:用bower下载了的内容存在bower_components中,但是怎么在页面中链接呢?比如jquery,不能写成/bower_components/jquery/src/jquery.js吧。
难道是要自己配置index.js么?还是手动copy资源到public下的目录? ~ 谢谢
一般有2种方法:
1. 直接使用bower_components的路径,你可以修改bower的配置文件,把bower_components改名为static或者其他什么的。
2. 在项目发布之前,进行打包处理。通过grunt或gulp脚本,把js,html,css统一打包生成一个dist文件夹,仅用于部署。
回复好快~ 貌似直接用/bower_components的确不行 我用的express4 一直找不到。 在public下建立了一个目录链接到bower_components下倒是可以了。。
1. 在根目录下建立 .bowerrc 文件,可以设置bower包的路径。
2. bower_components目录,需要在node里,设置static路径,对http开发才能用。
是的,不过我在app.js模仿着写了app.use(express.static(path.join(__dirname, ‘bower_components’)));
然后就把这个下当根目录来用了…… 也就开发可用……
这样就行了。
嗯感谢~学到很多
🙂
配置好了以后,那直接连接这个目录吗
很好的bower指引,看了一遍,感觉棒棒哒!~!~
🙂
使用bower管理的依赖,提交git的时候,下载的bower_components下的文件应该是不提交的吧?那更新代码的人,怎么知道使用了哪些库呢?
在bower.json里配置依赖关系。
是把所有包都 加在这里吗? “dependencies”: 还是有其它的key?
dependencies就行,只加载你直接依赖的。
如果不用脚手架的话,你习惯用 –save 还是先写 conf文件?
demo项目,通常会用 –save。
生产项目,肯定是写好conf文件。
我设置代理还是不行,我通过git下载东西是通过git clone git@github而通过git clone http://github无法下载,是不是我的git是ssh协议的原因
是不是写错了,选择HTTPS
自己运行注册命令时提示
The package you are trying to register is marked as private
是由于bower.json中:
“private”: true,引起的
自己做个记录
🙂
bower依赖添加了,用wiredep注入index.html,但是jquery的没有自动注入,于是在overrides里添加了”jquery”: {
“main”: “dist/jquery.min.js”
},依然无效,请问是什么原因
抱歉我没有遇到过这个问题,查一下官方文档bower关于overrides的用法吧。