第二章 安装与运行

本章将为你解决如下问题:

  • 如何搭建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 安装nodejs的依赖包

例如npm install express 就会默认安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install express@3.0.6

npm install -g 将包安装到全局环境中

但是代码中,直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了vmarket后,就可以在命令行中直接运行vm命令

npm install --save 安装的同时,将信息写入package.json中 项目路径中如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包

这样代码提交到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, 直接打开浏览器:

http://npm.taobao.org/sync/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 呢?

参考:

http://nqdeng.github.io/7-days-nodejs/#1.4

results matching ""

    No results matching ""