1 在Node.js 中如何用异步的方式读取一个文件,下面是一个例子:
//readfile.js
varfs = require('fs');
fs.readFile('file.txt', 'utf-8', function(err, data) { //第三个参数是回调函数,JavaScript 支持匿名的函数定义方式
if(err) {
console.error(err);
} else{
console.log(data);
}
});
console.log('end.');
运行的结果如下:
end.
Contents of the file.
fs.readFile 调用时所做的工作只是将异步式I/O 请求发送给了操作系统,然后立即
返回并执行后面的语句,执行完以后进入事件循环监听事件。当fs 接收到I/O 请求完成的
事件时,事件循环会主动调用回调函数以完成后续工作。因此会先看到end.,再看到
file.txt 文件的内容。
2 Node.js 中,并不是所有的API 都提供了同步和异步版本。Node.js 不
鼓励使用同步I/O。
3 Node.js 所有的异步I/O 操作在完成时都会发送一个事件到事件队列。在开发者看来,事
件由EventEmitter 对象提供。
4 本地模式和全局模式:
npm在默认情况下会从http://npmjs.org搜索或下载包,将包安装到当前目录的node_modules子目录下。
在使用npm 安装包的时候,有两种模式:本地模式和全局模式。默认情况下使用 npm
install命令就是采用本地模式,即把包安装到当前目录的 node_modules 子目录下。Node.js
的 require 在加载模块时会尝试搜寻 node_modules 子目录,因此使用npm 本地模式安装的包可以直接被引用。
npm 还有另一种不同的安装模式被成为全局模式,使用方法为:
npm [install/i] -g [package_name]
与本地模式的不同之处就在于多了一个参数 -g。
为什么要使用全局模式呢?多数时候并不是因为许多程序都有可能用到它,为了减少多重副本而使用全局模式,而是因为本地模式不会注册 PATH 环境变量。
npm 本地模式仅仅是把包安装到node_modules 子目录下,其中的bin 目录没有包含在PATH环境变量中,不能直接在命令行中调用。而当我们使用全局模式安装时,npm 会将包安装到系统目录,譬如/usr/local/lib/node_modules/,同时package.json 文件中bin 字段包含的文件会被链接到/usr/local/bin/。/usr/local/bin/ 是在PATH 环境变量中默认定义的,因此就可以直接在命令行中运行命令了。
使用全局模式安装的包并不能直接在JavaScript 文件中用 require 获得,因为 require 不会搜索/usr/local/lib/node_modules/。
总而言之,当要把某个包作为工程运行时的一部分时,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装。
5 创建全局链接
npm 提供了一个有趣的命令npm link,它的功能是在本地包和全局包之间创建符号链
接。使用全局模式安装的包不能直接通过 require 使用,但通过 npm link命令
可以打破这一限制。举个例子,我们已经通过 npm install -g express 安装了 express,
这时在工程的目录下运行命令:
$ npm link express
./node_modules/express -> /usr/local/lib/node_modules/express
我们可以在 node_modules 子目录中发现一个指向安装到全局的包的符号链接。通过这
种方法,我们就可以把全局包当本地包来使用了。
除了将全局的包链接到本地以外,使用 npm link命令还可以将本地的包链接到全局。
使用方法是在包目录(package.json 所在目录)中运行npm link 命令。