这篇文章来自于《Lynda.com.Node.js.First.Look》。
Node.js主要的作用是一个脱离浏览器的js调试器,是一个开源项目,官网地址:http://nodejs.org/,本来项目的名称是可以叫node的,但由于项目名称太短容易造成重名,所以定义为Node.js,我们也可以在描述中简称Node.js为Node。
安装过程没什么好说的,安装完成之后如果需要调试,可以编辑一个js文件
console.log("Hello world");
之后在命令行中运行:
node testnode.js
即可观察运行结果。
接下来我们看看Node的威力。这里我使用的Windows平台,并且使用Komodo作为我的开发工具(视频里都是OS X的,但我没有环境。Komodo包含了Node的templete,所以在这里用比较合适。)
首先我们来测试一段代码:
var os = require('os');
var message = 'This script is running on Node.js ' + process.version + ' on a ' + os.type() + '-based operation system.';
console.log(message);
从运行结果可以看出,我们从命令行运行的这部分Node代码和在浏览器中运行的js代码还是稍有不同的。
例如,我们可以在google chrome浏览器的“工具->javascript控制台”中输入js代码并运行。
同样,如果我们在命令行中直接运行:node,将会跳出一个Node的控制台并且允许我们输入js代码并运行。我们可以通过连续按两次Ctrl+c或者一次Ctrl+d或者运行process.exit()退出Node控制台,返回系统的command line。
我们可以通过运行npm install node-dev -p来安装node-dev模块,这个模块允许开启“调试中编辑-再继续调试”的功能。
我们运行:node-dev test.js,之后可以看到控制台停止,之后我们编辑test.js文件,可以发现每保存一次,我们的script会被重新运行一次。我们可以通过Ctrl+c退出dev模式。
Node是模块化的,并且提供了很多的模块可以供我们使用,例如我们之前的require('os')就是得到一个os的引用。
我们来看一下自己定义的模块:
我们定义一个导出斐波那契数列的模块:
exports.data = [1, 1, 2, 3, 5, 8, 13, 21];
然后我们使用这个模块:
var sequence = require('./fibonacci.js');
console.log(sequence.data);
就能够得到其中的数据。
对于我们自己下载的模块,我们需要将其拷贝到工程的node_modules目录下,并根据其目录中对应的package.json中定义的name来获取这个模块的引用,例如我们需要使用markdown模块,我们使用代码:
var parser = require("node-markdown");
var html = parser.Markdown('Using **markdown** helps you focus on writing, *not* on markup.');
console.log(html);
对于很多的模块,我们可以通过npm search查找自己需要的模块。(第一次运行的时候需要建立索引缓存可能会比较慢。)在unix/linux上可以通过grep过滤一些信息,window上就不行了,不过我们直接使用npm search zip可以查找包含zip关键字的模块。我们也可以去 https://npmjs.org/这里搜索我们需要的模块。
如果我们需要安装某个模块,只需要运行:npm install <模块名>即可。注意安装位置是控制台当前目录(大多数情况下我们需要在工程目录下运行这个命令)。
对于我们自己的模块,我们只需要在模块目录下运行npm init即可生成我们的package.json文件。
我们使用Node Packaged Modules(简称npm)来管理我们的模块,具体关于npm的总结如下(我们以markdown模块为例):
- 搜索node模块:npm search node-markdown(也可以去https://npmjs.org/搜索)
- 安装node模块:npm install node-markdown,每个下载来的模块都在工程的node_modules目录下有一个子目录,其中放置自己的配置文件、源文件,等等。
- 可以在工程中运行:npm init生成工程的package.json文件,并编辑其中的"dependencies"段添加工程依赖的module,之后通过npm install即可安装工程所需的所有模块;
- 更新工程中的module依赖项:npm update;如果需要更新全局的模块,使用-g选项:npm update -g;
- 当我们不需要某个module时,我们需要删除package.json文件中的dependencies对应项,并且运行:npm prune,即可删除原先的module;
package.json文件类似于:
{
"name": "html",
"version": "0.0.0",
"description": "ERROR: No README.md file found!",
"main": "script.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"dependencies": {
"node-markdown": "0.1.0" 这里的版本可以用"*"来表示依赖于最新版本
},
"repository": "",
"author": "jariwsz",
"license": "BSD"
}
ok,到这里基础部分讲完了,后面主要讲如何使用。