您的位置:首页 > Web前端 > Node.js

How to install Node.js, npm and modules

2011-12-30 12:54 746 查看
1.Download git

git for windows

http://code.google.com/p/msysgit/

2.Download node.js

https://github.com/joyent/node

or

cmd>git clone -recursive git://github.com/joyent/node.git

3.build node.js

cmd>vcbuild.bat release

4.copy release\node.exe to c:\node

5.Get npm and install

cmd>git clone --recursive git://github.com/isaacs/npm.git

cmd>cd npm

cmd>node cli.js install npm -gf

6.Install node.js modules

cmd>npm install websocket-server

cmd>npm install coffee-script

7.List all installed modules

cmd>npm ls

c:\node

├── coffee-script@1.2.0

├─┬ npm@1.0.106

│ ├── abbrev@1.0.3

│ ├── graceful-fs@1.0.1

│ ├── ini@1.0.1

│ ├─┬ minimatch@0.0.4

│ │ └── lru-cache@1.0.4

│ ├── node-uuid@1.2.0

│ ├── nopt@1.0.10

│ ├── proto-list@1.0.0

│ ├── request@2.1.1

│ ├── rimraf@1.0.8

│ ├── semver@1.0.11

│ ├── slide@1.1.3

│ └── which@1.0.2

└── websocket-server@1.4.04

npm install MODULE_NAME方法安装时,npm会根据这个module根目录下的package.json文件描述的dependency自动把这个module依赖的所有module下载下来放到本module自己的node_modules目录下。这样会有一个问题,就是产生的很多重复的module,例如connect和express都依赖qs,mime包,这些包在connect和express的node_modules目录都会存在。这样做的好处是可以依赖不同的版本,例如,以后qs的某个版本做了重大升级,和以前不兼容了,connect和express仍然可以继续在自己私有的node_modules目录放置旧版本的qs模块。

但是在公司的电脑里,由于设置了代理和防火墙,git, npm install 执行都会失败,无法从github或npmjs.org取到任何数据。如果遇到这样情况,可以从npmjs.org下载tar包,在调用npm install XX.tar进行安装。

但是这种安装方法需要注意module包的dependency问题,被依赖的module就不会自动下载到module自己的node_modules目录了,我的做法是先npm install这些依赖的module,使这些被依赖的module和你要安装的module处于同一级别的node_modules下,再安装你的module时就不会有问题了。还是以express和connect为例:

http://search.npmjs.org可以查询到模块的依赖关系,connect依赖qs,mime,formidable,而express依赖connect,mime,qs,mkdirp。依次下载qs,mime,formidable,mkdirp的tar包安装,最后下载connect,express的tar包安装。在安装express时仍然提示错误:

npm http GET https://registry.npmjs.org/mkdirp/0.0.7
npm ERR! error installing express@2.5.2

原来express依赖的是mkdirp0.07版,需要从npmjs.org下载对应版本的mkdirp的tar包先安装。每个module依赖的其它module的版本号也可以从这个module的package.json中查到。

这里对node使用时查找module的方法进行一个简要的说明:

在使用requeire(XXX)时,有三种方式:

1.相对路径,例如require('../_util')

2.绝对路径,例如require('/util'),这种尽量不要使用

3.外部module,例如:require('events')

前两种很好理解,通过文件系统查找,

第三种,events是外部的module,并不是当前目录下的某个文件。node把module都是存放在node_modules目录下的,可以有很多级别的node_modules目录,每个module都可以有自己的node_modules目录用于存放自己依赖的module,node会查找node_modules目录是否存在,如果不存在继续向上一次目录查找,直到根目录。如果找到了,就在这个目录下找需要的模块是否存在,这里就会查找events.js是否存在。一个文件就可以是一个module,但是对于复杂的module都会是一批文件,放入一个文件夹中(大部分module都是这种类型的),由package.json对这个module进行描述,包括版本,依赖,main模块等信息。这里就会找到events目录,然后根据package.json的描述找到主模块。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: