第二章 安装与运行
本章将为你解决如下问题:
- 如何搭建node开发环境
- 问题2
- 问题3
1 通过nvm安装
nvm(Node Version Manager)Node版本管理工具,其windows版本叫nvmw(nvm-windows)。之所以需要这个工具,是因为 Node.js 的各种特性都没有稳定下来,所以我们经常由于老项目或尝试新的特性的原因,需要使用各种版本。
1.1 安装nvm
1.1.1 Linux/Mac OSX
直接从github clone nvm到本地, 这里假设大家都使用 ~/git 目录存放 git 项目:
$ cd ~/git
$ git clone https://github.com/cnpm/nvm.git
配置终端启动时自动执行 source ~/git/nvm/nvm.sh, 在 ~/.bashrc, ~/.bash_profile, ~/.profile, 或者 ~/.zshrc 文件添加以下命令:
$ source ~/git/nvm/nvm.sh
重新打开你的终端, 输入 nvm
$nvm
Node Version Manager
Note: <version> refers to any version-like string nvm understands. This includes:
- full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)
- default (built-in) aliases: node, stable, unstable, iojs, system
- custom aliases you define with `nvm alias foo`
Usage:
nvm help Show this message
nvm --version Print out the latest released version of nvm
nvm install [-s] <version> Download and install a <version>, [-s] from source. Uses .nvmrc if available
--reinstall-packages-from=<version> When installing, reinstall packages installed in <node|iojs|node version number>
nvm uninstall <version> Uninstall a version
nvm use [--silent] <version> Modify PATH to use <version>. Uses .nvmrc if available
nvm run <version> [<args>] Run <version> with <args> as arguments. Uses .nvmrc if available for <version>
nvm current Display currently activated version
nvm ls List installed versions
nvm ls <version> List versions matching a given description
nvm ls-remote List remote versions available for install
nvm version <version> Resolve the given description to a single local version
nvm version-remote <version> Resolve the given description to a single remote version
nvm deactivate Undo effects of `nvm` on current shell
nvm alias [<pattern>] Show all aliases beginning with <pattern>
nvm alias <name> <version> Set an alias named <name> pointing to <version>
nvm unalias <name> Deletes the alias named <name>
nvm reinstall-packages <version> Reinstall global `npm` packages contained in <version> to current version
nvm unload Unload `nvm` from shell
nvm which [<version>] Display path to installed node version. Uses .nvmrc if available
Example:
nvm install v0.10.32 Install a specific version number
nvm use 0.10 Use the latest available 0.10.x release
nvm run 0.10.32 app.js Run app.js using node v0.10.32
nvm exec 0.10.32 node app.js Run `node app.js` with the PATH pointing to node v0.10.32
nvm alias default 0.10.32 Set default node version on a shell
Note:
to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)log/2014/03/node-env-and-faster-npm.html
1.1.2 Windows
略
1.2 node安装/卸载
使用nvm ls-remote查看远端包含哪些版本
$ nvm ls-remote
.......//省略一部分版本
v4.2.0
v4.2.1
v4.2.2
v4.2.3
v4.2.4
v4.2.5
v4.2.6
v4.3.0
v4.3.1
v4.3.2
v4.4.0
v4.4.1
v4.4.2
v4.4.3
v4.4.4
v4.4.5
v4.4.6
v4.4.7
.......
上面列出了可供使用的版本,我们可以依据实际选择合适的版本。
使用nvm install安装
$ nvm install 4.4.0
如你想安装当前最新的稳定版本,使用stable
$ nvm install stable
使用nvm ls查看已安装
$ nvm ls
使用nvm uninstall卸载node
$ nvm uninstall 4.4.0
1.3 Node版本管理
1.3.1 安装多个版本
你可以安装多个node版本,并在多个版本之间自由切换
安装一个新的版本
$ nvm install 7.0.0
查看当前安装的版本
$ nvm ls
使用4.4.0版本
$ nvm use 4.4.0
1.3.2 使用 .nvmrc 文件配置项目所使用的 node 版本
如果你的默认node版本(通过 nvm alias 命令设置的)与项目所需的版本不同,则可在项目根目录或其任意父级目录中创建 .nvmrc 文件,在文件中指定使用的 node 版本号,例如:
$ cd <项目根目录> #进入项目根目录
$ echo 4.4.0 > .nvmrc #添加 .nvmrc 文件
$ nvm use #无需指定版本号,会自动使用 .nvmrc 文件中配置的版本
$ node -v #查看 node 是否切换为对应版本
查看node的安装位置
$ which node
2 编译安装
确保系统下g++版本在4.6以上,python版本在2.6以上。
从nodejs.org下载tar.gz后缀的NodeJS最新版源代码包并解压到某个位置。
进入解压到的目录,使用以下命令编译和安装。
$ ./configure
$ make
$ sudo make install
3 运行NodeJS
按照惯例,我们还是以输出“Hello World!”为例:
3.1 使用REPL方式
输入node进入REPL模式
$ node
> console.log('Hello World!');
Hello World!
3.2 运行js文件
新建文件hello.js,输入如下内容并保存
function hello() {
console.log('Hello World!');
}
hello();
终端下键入node hello.js运行,结果如下:
$ node hello.js
Hello World!
4. NPM
NPM(Nodejs Package Manager)是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
允许用户从NPM服务器下载别人编写的三方包到本地使用。
允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
可以看到,NPM建立了一个NodeJS生态圈,NodeJS开发者和用户可以在里边互通有无。以下分别介绍这三种场景下怎样使用NPM。
NPM 可以自动管理包的依赖. 只需要安装你想要的包, 不必考虑这个包的依赖包.
在 PHP 中, 包管理使用的 Composer, python 中,包管理使用 easy_install 或者 pip,ruby 中我们使用 gem。而在 Node.js 中,对应就是 npm,npm 是 Node.js Package Manager 的意思。
4.1 下载三方包
需要使用三方包时,首先得知道有哪些包可用。虽然npmjs.org提供了个搜索框可以根据包名来搜索,但如果连想使用的三方包的名字都不确定的话,就请百度一下吧。知道了包名后,就可以在工程目录下打开终端,使用以下命令来下载三方包,我们使用express包作为测试,关于express的相关内容会在后续章节详细介绍。
$ npm install express
...
express@0.0.2 node_modules\express
下载好之后,express包就放在了工程目录下的node_modules目录中,因此在代码中只需要通过require('express')的方式就好,无需指定三方包路径。
以上命令默认下载最新版三方包,如果想要下载指定版本的话,可以在包名后边加上@(version),例如通过以下命令可下载0.0.1版的express。
$ npm install express@0.0.1
...
express@0.0.1 node_modules\express
将下载的包保存,使用--save参数
$ npm install express --save
常用命令
npm install
例如npm install express 就会默认安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install express@3.0.6
npm install
但是代码中,直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了vmarket后,就可以在命令行中直接运行vm命令
npm install
这样代码提交到github时,就不用提交node_modules这个文件夹了。
npm init 会引导你创建一个package.json文件,包括名称、版本、作者这些信息等
npm remove
npm update
npm ls 列出当前安装的了所有包
npm root 查看当前包的安装路径
npm root -g 查看全局的包的安装路径
npm help 帮助,如果要单独查看install命令的帮助,可以使用的npm help install
npm list -g --depth 0 查看全局包
5 加速访问
5.1 使用国内镜像
由于国内访问NVM,NPM国外源较慢,所以可以通过简单的 ---registry 参数, 使用国内的镜像 http://registry.npm.taobao.org
$ npm install express --registry=http://registry.npm.taobao.org
于是屏幕哗啦哗啦地一大片输出:
$ npm install express --registry=http://registry.npm.taobao.org
/Users/chenxin/study/nodejs/use_Express
└─┬ express@4.14.0
├─┬ accepts@1.3.3
│ ├─┬ mime-types@2.1.11
│ │ └── mime-db@1.23.0
│ └── negotiator@0.6.1
├── array-flatten@1.1.1
├── content-disposition@0.5.1
├── content-type@1.0.2
├── cookie@0.3.1
├── cookie-signature@1.0.6
├─┬ debug@2.2.0
│ └── ms@0.7.1
├── depd@1.1.0
├── encodeurl@1.0.1
├── escape-html@1.0.3
├── etag@1.7.0
├─┬ finalhandler@0.5.0
│ ├── statuses@1.3.0
│ └── unpipe@1.0.0
├── fresh@0.3.0
├── merge-descriptors@1.0.1
├── methods@1.1.2
....//省略部分内容
我们也可以通过如下命令,永久使用国内源
$ npm config set registry https://registry.npm.taobao.org
通过下面的命令验证是否设置成功:
$ npm config get registry
5.2 使用cnpm
由于镜像跟官方的 npm 源还是会有一个同步时间差异, 目前 cnpm 的默认同步时间间隔是 10 分钟. 如果你是模块发布者, 或者你想马上同步一个模块, 那么推荐你安装 cnpm cli:
$ npm install cnpm -g --registry=http://registry.npm.taobao.org
通过 cnpm 命令行, 你可以快速同步任意模块:
$ cnpm sync koa connect mocha
呃, 我就是不想安装 cnpm cli 怎么办? 哈哈, 早就想到你会这么懒了, 于是我们还有一个 web 页面:
例如我想马上同步 koa, 直接打开浏览器:
或者你是命令行控, 通过 open 命令打开:
$ open http://npm.taobao.org/sync/koa
如果你安装的模块依赖了 C++ 模块, 需要编译, 肯定会通过 node-gyp 来编译, node-gyp 在第一次编译的时候, 需要依赖 node 源代码, 于是又会去 node dist 下载, 于是大家又会吐槽, 怎么 npm 安装这么慢...
好吧, 于是又要提到 --disturl 参数, 通过中国镜像来下载:
$ npm install microtime \
--registry=http://registry.npm.taobao.org \
--disturl=http://npm.taobao.org/mirrors/node
再次要提到 cnpm cli, 它已经默认将 --registry 和 --disturl 都配置好了, 谁用谁知道 . 写到这里, 就更快疑惑那些不想安装 cnpm cli 又吐槽 npm 慢的同学是基于什么考虑不在本地安装一个 cnpm 呢?