HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

深入浅出 Node.js(二):Node.js&NPM 的安装与配置

  • 2011-11-30
  • 本文字数:4690 字

    阅读完需:约 15 分钟

专栏的第二篇文章《Node&NPM 的安装与配置》介绍 Node 的安装部署、环境配置以及 NPM 的安装。

Node.js 安装与配置

Node.js 已经诞生两年有余,由于一直处于快速开发中,过去的一些安装配置介绍多数针对 0.4.x 版本而言的,并非适合最新的 0.6.x 的版本情况了,对此,我们将在 0.6.x 的版本上介绍 Node.js 的安装和配置。(本文一律以 0.6.1 为例,0.6 的其余版本,只需替换版本号即可。从 http://nodejs.org/#download 可以查看到最新的二进制版本和源代码)。

Windows 平台下的 Node.js 安装

在过去,Node.js 一直不支持在 Windows 平台下原生编译,需要借助 Cygwin 或 MinGW 来模拟 POSIX 系统,才能编译安装。幸运的是 2011 年 6 月微软开始与 Joyent 合作移植 Node.js 到 Windows 平台上( http://www.infoq.com/cn/news/2011/06/node-exe ),这次合作的成果最终呈现在 0.6.x 的稳定版的发布上。这次的版本发布使得 Node.js 在 Windows 平台上的性能大幅度提高,使用方面也更容易和轻巧,完全摆脱掉 Cygwin 或 MinGW 等实验室式的环境,并且在某些细节方面,表现出比 Linux 下更高的性能,细节参见 http://www.infoq.com/news/2011/11/Nodejs-Windows

在 Windows(Windows7)平台下,我将介绍二种安装 Node.js 的方法,即普通和文艺安装方法。

普通的安装方法

普通安装方法其实就是最简单的方法了,对于大多 Windows 用户而言,都是不太喜欢折腾的人,你可以从这里( http://nodejs.org/dist/v0.6.1/node-v0.6.1.msi )直接下载到 Node.js 编译好的 msi 文件。然后双击即可在程序的引导下完成安装。

在命令行中直接运行:

复制代码
node -v

命令行将打印出:

复制代码
v0.6.1

该引导步骤会将 node.exe 文件安装到 C:\Program Files (x86)\nodejs\目录下,并将该目录添加进 PATH 环境变量。

文艺的安装方法

Windows 平台下的文艺安装方法主要提供给那些热爱折腾,喜欢编译的同学们。在编译源码之前需要注意的是你的 Windows 系统是否包含编译源码的工具。Node.js 的源码主要由 C++ 代码和 JavaScript 代码构成,但是却用 gyp 工具( http://code.google.com/p/gyp/ )来做源码的项目管理,该工具采用 Python 语言写成的。在 Windows 平台上,Node.js 采用 gyp 来生成 Visual Studio Solution 文件,最终通过 VC++ 的编译器将其编译为二进制文件。所以,你需要满足以下两个条件:

  1. Python(Node.js 建议使用 2.6 或更高版本,不推荐 3.0),可以从这里( http://python.org/ )获取。
  2. VC++ 编译器,包含在 Visual Studio 2010 中(VC++ 2010 Express 亦可),VS2010 可以从这里( http://msdn.microsoft.com/en-us/vstudio/hh388567 )找到。

下载 Node.js 的 0.6.1 版本的源码压缩包( http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz )并解压之。

通过命令行进入解压的源码目录,执行 vcbuild.bat release 命令,然后经历了漫长的等待后,编译完成后,在 Release 目录下可以找到编译好的 node.exe 文件。通过命令行执行 node -v。

命令行返回结果为:

复制代码
v0.6.1

事实上,如果你的编译环境中存在 WiX 工具集( http://wix.sourceforge.net/ ),执行 vcbuild.bat msi release 命令,你将会在 Relase 目录下找到 node.msi。

是的,我们回到了一开始的普通安装方法。所谓文艺就是多走一些路,多看一些风景罢了。

Unix/Linux 平台下的 Node.js 安装

由于 Node.js 尚处于 v0.x.x 的版本的快速发展中,Unix/Linux 平台的发行版都不会预置 Node 的二进制文件,通过源码进行编译安装是目前最好的选择。而且用 Unix/Linux 系统的同学们多数都是文艺程序员,本节只介绍如何通过源码进行编译和安装。

安装条件

如同在 Windows 平台下一样,Node.js 依然是采用 gyp 工具管理生成项目的,不同的是通过 make 工具进行最终的编译。所以 Unix/Linux 平台下你需要以下几个必备条件,才能确保编译完成:

  1. Python。用于 gyp,可以通过在 shell 下执行 python 命令,查看是否已安装 python,并确认版本是否符合需求(2.6 或更高版本,但不推荐 3.0)。
  2. 源代码编译器,通常 Unix/Linux 平台都自带了 C++ 的编译器(GCC/G++)。如果没有,请通过当前发行版的软件包安装工具安装 make,g++ 这些编译工具。
  3. Debian/Ubuntu 下的工具是 apt-get
  4. RedHat/centOS 下通过 yum 命令
  5. Mac OS X 下你可能需要安装 xcode 来获得编译器
  6. 其次,如果你计划在 Node.js 中启用网络加密,OpenSSL 的加密库也是必须的。该加密库是 libssl-dev,可以通过 apt-get install libssl-dev 等命令安装。

检查环境并安装

完成以上预备条件后,我们获取源码并进行环境检查吧:

复制代码
wget <a href="http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz">http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz</a>
tar zxvf node-v0.6.1.tar.gz
cd node-v0.6.1
./configure
上面几行命令是通过 wget 命令下载最新版本的代码,并解压之。./configure 命令将会检查环境是否符合 Nodejs 的编译需要。
Checking for program g++ or c++ : /usr/bin/g++
Checking for program cpp : /usr/bin/cpp
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for g++ : ok
Checking for program gcc or cc : /usr/bin/gcc
Checking for program ar : /usr/bin/ar
Checking for program ranlib : /usr/bin/ranlib
Checking for gcc : ok
Checking for library dl : yes
Checking for openssl : yes
Checking for library util : yes
Checking for library rt : yes
Checking for fdatasync(2) with c++ : yes
'configure' finished successfully (7.350s)

如果检查没有通过,请确认上面提到的三个条件是否满足。如果 configure 命令执行成功,就可以进行编译了:

复制代码
make
make install

Nodejs 通过 make 工具进行编译和安装(如果 make install 不成功,请使用 sudo 以确保拥有权限)。完成以上两步后,检查一下是否安装成功:

复制代码
node -v

检查是否返回:

复制代码
v0.6.1

至此,Nodejs 已经编译并安装完成。如需卸载,可以执行 make uninstall 进行卸载。

小结

以上介绍了 *nix 和 Windows 平台下 Nodejs 的安装,之后可以如同 Nodejs 官方网站上介绍的那样,编写 example.js 文件。

复制代码
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://127.0.0.1:1337/');

在命令行中执行它:

复制代码
node example.js

你就可以通过浏览器访问 http://127.0.0.1:1337 得到 Hello World 的响应。

安装 NPM

NPM 的全称是 Node Package Manager,如果你熟悉 ruby 的 gem,Python 的 PyPL、setuptools,PHP 的 pear,那么你就知道 NPM 的作用是什么了。没错,它就是 Nodejs 的包管理器。Nodejs 自身提供了基本的模块。但是在这些基本模块上开发实际应用需要较多的工作。所幸的是笔者执笔此文的时候 NPM 上已经有了 5112 个 Nodejs 库或框架,这些库从各个方面可以帮助 Nodejs 的开发者完成较为复杂的应用。这些库的数量和活跃也从侧面反映出 Nodejs 社区的发展是十分神速和活跃的。下面我将介绍安装 NPM 和通过 NPM 安装 Nodejs 的第三方库,以及在大陆的网络环境下,如何更好的利用 NPM。

Unix/Linux 下安装 NPM

就像 NPM 的官网( http://npmjs.org/ )上介绍的那样,安装 NPM 仅仅是一行命令的事情:

复制代码
curl http://npmjs.org/install.sh | sh

这里详解一下这句命令的意思,curl http://npmjs.org/install.sh 是通过 curl 命令获取这个安装 shell 脚本,按后通过管道符| 将获取的脚本交由 sh 命令来执行。这里如果没有权限会安装不成功,需要加上 sudo 来确保权限:

复制代码
curl http://npmjs.org/install.sh | sudo sh

安装成功后执行 npm 命令,会得到一下的提示:

复制代码
Usage: npm <command>
where <command> is one of:
adduser, apihelp, author, bin, bugs, c, cache, completion,
config, deprecate, docs, edit, explore, faq, find, get,
help, help-search, home, i, info, init, install, la, link,
list, ll, ln, ls, outdated, owner, pack, prefix, prune,
publish, r, rb, rebuild, remove, restart, rm, root,
run-script, s, se, search, set, show, star, start, stop,
submodule, tag, test, un, uninstall, unlink, unpublish,
unstar, up, update, version, view, whoami

我们以 underscore 为例,来展示下通过 npm 安装第三方包的过程。

复制代码
npm install underscore

返回:

复制代码
underscore@1.2.2 ./node_modules/underscore

由于一些特殊的网络环境,直接通过 npm install 命令安装第三方库的时候,经常会出现卡死的状态。幸运的是国内 CNode 社区的 @fire9 同学利用空余时间搭建了一个镜像的 NPM 资源库,服务器架设在日本,可以绕过某些不必要的网络问题。你可以通过以下这条命令来安装第三方库:

复制代码
npm --registry "<a href="http://npm.hacknodejs.com/">http://npm.hacknodejs.com/</a>" install underscore

如果你想将它设为默认的资源库,运行下面这条命令即可:

npm config set registry “ http://npm.hacknodejs.com/

设置之后每次安装时就可以不用带上—registry 参数。值得一提的是还有另一个镜像可用,该镜像地址是 http://registry.npmjs.vitecho.com ,如需使用,替换上面两行命令的地址即可。

Windows 下安装 NPM

由于 Nodejs 最初在 Linux 开发下的历史原因,导致 NPM 一开始也不支持 Windows 环境,但是随着 Nodejs 成功移植到到 Windows 平台,NPM 在 Windows 下的需求亦是日渐增加。下面开始 Windows 下的 NPM 之旅吧。

安装 GIT 工具

由于 github 网站不支持直接下载打包了所有 submodule 的源码包,所以需要通过 git 工具来签出所有的源码。从 http://code.google.com/p/msysgit/downloads/list ,可以下载到 msysgit 这个 Windows 平台下的 git 客户端工具(最新版本文件为 Git-1.7.7.1-preview20111027.exe)。在下载之后双击安装。

下载 NPM 源码

打开命令行工具(CMD),执行以下命令,可以通过 msysgit 签出 NPM 的所有源码和依赖代码并安装 npm。

复制代码
git clone --recursive git://github.com/isaacs/npm.git
cd npm
node cli.js install npm -gf

在执行这段代码之前,请确保 node.exe 是跟通过 node.msi 的方式安装的,或者在 PATH 环境变量中。这段命令也会将 npm 加入到 PATH 环境变量中去,之后可以随处执行 npm 命令。如果安装中遇到权限方面的错误,请确保 cmd 命令行工具是通过管理员身份运行的。安装成功后,执行以下命令:

复制代码
npm install underscore

返回:

复制代码
underscore@1.2.2 ./node_modules/underscore

如此,Windows 平台下的 NPM 安装完毕。如果遭遇网络问题无法安装,请参照 Linux 下的 NPM 命令,添加镜像地址。

参考文献

关于作者

田永强,新浪微博 @朴灵,前端工程师,现职于 SAP,从事 Mobile Web App 方面的研发工作,对 NodeJS 持有高度的热情,寄望打通前端 JavaScript 与 NodeJS 的隔阂,将 NodeJS 引荐给更多的前端工程师。兴趣:读万卷书,行万里路。个人 Github 地址: http://github.com/JacksonTian

关注 IT 趋势,承载前沿、深入、有温度的内容。感兴趣的读者可以搜索 ID:laocuixiabian,或者扫描下方二维码加关注。


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家加入到 InfoQ 中文站用户讨论组中与我们的编辑和其他读者朋友交流。

2011-11-30 09:00211893

评论

发布
暂无评论
发现更多内容

MySql 过滤查询(以字母开头,以数字开头,非数字开头,非字母开头)

迷彩

数据库 MySQL 数据库 6月月更

浅谈DOM中的类型

大熊G

JavaScript 前端 6月月更

Java 中的Comparator使用技巧

Nick

Java stream 6月月更 Comparator nullsFirst

Eureka的TimedSupervisorTask类(自动调节间隔的周期性任务)

程序员欣宸

Java SpringCloud 6月月更

深挖数据价值,2022隐私计算大赛开启!

Jessica@数牍

隐私计算 大数据技能大赛 隐匿查询性能优化 隐私求交性能优化

一条命令开启监控之旅!

TanCloud探云

开源 监控系统

mysql中的查询计划及sql语句性能分析:explain

乌龟哥哥

6月月更

Ajax入门教程

倔强的牛角

ajax 6月月更

PingCAP 入选 2022 Gartner 云数据库“客户之声”,获评“卓越表现者”最高分

Geek_2d6073

如何写出同事看不懂的Java代码?

码农参上

后端 Java’

剖析 SPI 在 Spring 中的应用

vivo互联网技术

spring Java’ JavaSPI Spring SPI Dubbo SPI

Java Core 「13」ReentrantReadWriteLock 再探析

Samson

学习笔记 Java core 6月月更

K8S学习笔记--《开篇词|迎难而上,做云原生时代的弄潮儿》

IT蜗壳-Tango

容器 k8s IT蜗壳教学 6月月更

DOM操作

Jason199

js DOM事件 6月月更

Hoo虎符研究院 | 币圈后浪D/Bond一个基于ERC-3475标准开发的去中心化债券生态系统平台

区块链前沿News

Hoo 虎符交易所

C语言数据的储存

未见花闻

6月月更

如何使用物联网低代码平台进行设备调试?

AIRIOT

低代码 物联网 低代码开发

Flutter 中的 Flash 错误消息

坚果

6月月更

Discourse 新用户可插入媒体的数量

HoneyMoose

军体拳代码

工程师日月

6月月更

Java 使用 char[] Array 还是 String 存储字符串

HoneyMoose

SRE Lesson One -- Day1 准备你的工作环境

耳东@Erdong

SRE 6月月更 SRE Lesson One

全面双录倒计时,融云助力泛金融业务办理高效合规可回溯

融云 RongCloud

【LeetCode】 移除字母异位词后的结果数组Java题解

Albert

LeetCode 6月月更

InfoQ 极客传媒 15 周年庆征文|分布式设计介绍

No Silver Bullet

6月月更 InfoQ极客传媒15周年庆 分布式设计

Linux开发_文件发送与接收

DS小龙哥

6月月更

深度学习编程常用工具Jupyter Notebook

Damon

深度学习 Jupyter Notebook jupyterlab 6月月更

如何提高远程办公的效率?| 社区征文

石云升

远程办公 6月月更 初夏征文

Python 设计模式:单例模式

宇宙之一粟

Python 单例模式 6月月更

设计微博系统中“微博评论”高性能高可用计算机构

Fan

架构师实战营

应用配置管理,基础原理分析

Java 微服务 构架

深入浅出Node.js(二):Node.js&NPM的安装与配置_JavaScript_田永强_InfoQ精选文章