1.概述:
Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快速的、可扩展的网络应用。Node.js采用事件驱动和非阻塞I/O模型,使其变得轻微和高效,非常适合构建运行在分布式设备的数据密集型实时应用。
运行于浏览器的Javascript,浏览器就是Javascript代码的解析器,而Node.js则是服务器端JS的代码解析器,存于服务器端的JS代码由Node.js来解析和应用。
JS解析器只是JS代码运行的一种环境,浏览器是JS运行的一种环境,浏览器为JS提供了操作DOM对象和window对象等接口。Node.js也是JS的一种运行环境,node.js为JS提供操作文件、创建http服务、创建TCP、UDP服务等接口,所以Node.js可以完成其他后台语言能完成的工作。
2.交互式运行环境:PEPL
Node.js提供了一个交互式运行环境,通过这个环境,可以立即执行JS代码,使用方法类似于Chrome浏览器中Firebug插件中的Console。
在Linux环境进入终端后,属于"node"或者“nodejs”进入Node.js的交互式运行环境,Ctrl+d可以退出此环境。
查看系统中安装的Node.js版本:node -v or nodejs -v
运行JS文件,eg:node file.js or nodejs file.js
3.Node.js模块和包
a.模块
Node.js官方提供了很多模块,这些模块分别实现了一种功能,如操作文件模块fs,构建http服务模块的http等,每个模块都是一个JS文件,当然也可以自己编 写模块。
2.包
包可以将多个具有依赖关系的模块组织在一起,封装多个模块,以方便管理。Node.js采用了CommonJS规范,根据CommonJS规范规定,一个JS文件就是 一个模块,而包是一个文件夹,包内必须包含一个JSON文件,命名package.json。一般情况下,包内bin文件夹存放二进制文件,包内的lib文件夹存放JS文件,包内的doc文件夹存放文档,包内的test文件夹存放单元测试。package.json文件中需要包含的字段及包的使用。
3.npm包管理工具
npm是node.js的包管理工具,npm定义了包依赖关系标准,我们使用npm主要用来下载第三方包和管理本地下载的第三方包。
4:总结
一:什么是nodejs: 什么是 NodeJS JS是脚本语言,脚本语言都需要一个解析器才能运行。对于写在 HTML 页面里的 JS,浏览器充当了解析器的角色。而对于需要独立运行的 JS,NodeJS 就是一个解析器。 每一种解析器都是一个运行环境,不但允许JS定义各种数据结构,进行各种计算,还允许 JS 使用运行环境提供的内置对象和方法做一些事情。例如运行在浏览器中的JS的用途是操作 DOM,浏览器就提供了 document 之类的内置对象。而运行在 NodeJS 中的 JS 的用途是操作磁盘文件或搭建 HTTP 服务器,NodeJS 就相应提供了 fs、http 等内置对象。---------------------------------------------------------------------------------------------nodejs是一个解释器,是运行在服务端的js. 二:Nodejs用途:--------------------------------------------------------------------------------------------实现高性能web服务器,看重的是事件机制和异步IO. 用途 尽管存在一听说可以直接运行 JS 文件就觉得很酷的同学,但大多数同学在接触新东西时首先关心的是有啥用处,以及能带来啥价值。 NodeJS 的作者说,他创造 NodeJS 的目的是为了实现高性能 Web 服务器,他首先看重的是事件机制和异步 IO 模型的优越性,而不是 JS。但是他需要选择一种编程语言实现他的想法,这种编程语言不能自带 IO 功能,并且需要能良好支持事件机制。JS 没有自带 IO 功能,天生就用于处理浏览器中的 DOM 事件,并且拥有一大群程序员,因此就成为了天然的选择。 如他所愿,NodeJS 在服务端活跃起来,出现了大批基于 NodeJS 的 Web 服务。而另一方面,NodeJS 让前端众如获神器,终于可以让自己的能力覆盖范围跳出浏览器窗口,更大批的前端工具如雨后春笋。 因此,对于前端而言,虽然不是人人都要拿 NodeJS 写一个服务器程序,但简单可至使用命令交互模式调试 JS 代码片段,复杂可至编写工具提升工作效率。 三:安装nodejs:---------------------------------------------------------------------------------------------官网下载,安装 1:windous安装: 32 位安装包下载地址 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x86.msi 64 位安装包下载地址 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x64.msi 安装步 1:点点点。 2:检测PATH环境变量是否配置了Node.js,点击开始=》运行=》输入"cmd" => 输入命令"path",输出如下结果: (也可以自己手动配置环境变量) 3:查看版本node --version 2:Windows 二进制文件 (.exe)安装: 32 位安装包下载地址 : http://nodejs.org/dist/v0.10.26/node.exe 64 位安装包下载地址 : http://nodejs.org/dist/v0.10.26/x64/node.exe 安装步骤 1: 双击下载的安装包 Node.exe 2:点击 Run(运行)按钮将出现命令行窗口: 3:版本测试 cd downlocad node --version 3:Ubuntu 上安装 Node.js Node.js 源码安装: 1:在 Github 上获取 Node.js 源码: $ sudo git clone https://github.com/nodejs/node.git Cloning into 'node'... 2:修改目录权限: $ sudo chmod -R 755 node 3:使用 ./configure 创建编译文件,并按照: $ cd node $ sudo ./configure $ sudo make $ sudo make install 4:查看 node 版本: $ node --version v0.10.25 Ubuntu apt-get命令安装 命令格式如下: sudo apt-get install nodejs sudo apt-get install npm 4:CentOS 下安装 Node.js 1:下载源码,你需要在https://nodejs.org/en/download/下载最新的Nodejs版本,本文以v0.10.24为例: cd /usr/local/src/ wget http://nodejs.org/dist/v0.10.24/node-v0.10.24.tar.gz 2:解压源码 tar zxvf node-v0.10.24.tar.gz 3: 编译安装 cd node-v0.10.24 ./configure --prefix=/usr/local/node/0.10.24 make make install 4:配置NODE_HOME,进入profile编辑环境变量 vim /etc/profile 设置nodejs环境变量,在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 一行的上面添加如下内容: #set for nodejs export NODE_HOME=/usr/local/node/0.10.24 export PATH=$NODE_HOME/bin:$PATH 5::wq保存并退出,编译/etc/profile 使配置生效 source /etc/profile 6:验证是否安装配置成功 node -v 7:输出 v0.10.24 表示配置成功 npm模块安装路径 /usr/local/node/0.10.24/lib/node_modules/ 注:Nodejs 官网提供了编译好的Linux二进制包,你也可以下载下来直接应用。 四:在 Cloud Studio 中运行 node.js 程序: Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。基于 Google 的 V8 引擎,使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。前端程序员在不懂 PHPRubyPython 这样的动态编程语言时完全可以基于 Node.js 使用自己熟悉的JS语言来搭建一个高效的 Web 服务。通过 Cloud Studio 平台,我们可以快速开始自己的 Node.js 项目,并且可以实时访问他。 Cloud Studio 已经为我提供了内置的 Node.js 开发环境,我们不仅可以通过切换运行环境来编写 Node.js 代码,也可以通过 访问链接 功能来实时查看代码的运行效果,下面我通过一个例子来展示: step1:访问Cloud Studio(https://studio.coding.net),注册/登录账户。 step2:在右侧的运行环境菜单选择:"Node.js" 运行环境 step3:在左侧代码目录中新建Node.js代码目录编写你的 Node.js 代码 step4:进入 Node.js 代码目录运行 node hello.js 我们在代码中引入了 http 模块,并且通过http.createServer()方法创建了一个 http 服务器,通过listen() 方法绑定了 8888 端口 step5:点击最右侧的【访问链接】选项卡,在访问链接面板中填写端口号为:8888,点击创建链接,即可点击生成的链接访问我们的 Node.js 项目 /*代码示例*/: var http = require('http'); http.createServer(function (request, response) { // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 发送响应数据 "Hello World" response.end("Hello, Universe! I'm running on Cloud Studio! "); }).listen(8888); // 终端打印如下信息 console.log('Server running at http://127.0.0.1:8888/'); Tips: 从终端中输入命令可以看出 Cloud Studio 为我们集成了 Ubuntu16.04.1 + node8.10.0 的开发环境: 五:Node.js 创建第一个应用: 如果我们使用PHP来编写后端的代码时,需要Apache 或者 Nginx 的HTTP 服务器,并配上 mod_php5 模块和php-cgi。 从这个角度看,整个"接收 HTTP 请求并提供 Web 页面"的需求根本不需 要 PHP 来处理。 不过对 Node.js 来说,概念完全不一样了。使用 Node.js 时,我们不仅仅 在实现一个应用,同时还实现了整个 HTTP 服务器。事实上,我们的 Web 应用以及对应的 Web 服务器基本上是一样的。 在我们创建 Node.js 第一个 "Hello, World!" 应用前,让我们先了解下 Node.js 应用是由哪几部分组成的: 1:引入 required 模块:我们可以使用 require 指令来载入 Node.js 模块。 2:创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。 3:接收请求与响应请求 服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。: 创建 Node.js 应用 步骤一、引入 required 模块 我们使用 require 指令来载入 http 模块,并将实例化的 HTTP 赋值给变量 http, 实例如下: var http = require("http"); 步骤二、创建服务器 接下来我们使用 http.createServer() 方法创建服务器,并使用 listen 方法绑定 8888 端口。 函数通过 request, response 参数来接收和响应数据。 实例如下,在你项目的根目录下创建一个叫 server.js 的文件,并写入以下代码: var http = require('http'); http.createServer(function (request, response) { // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 发送响应数据 "Hello World" response.end('Hello World '); }).listen(8888); // 终端打印如下信息 console.log('Server running at http://127.0.0.1:8888/'); 以上代码我们完成了一个可以工作的 HTTP 服务器。 步骤三:使用 node 命令执行以上的代码: node server.js Server running at http://127.0.0.1:8888/ cmdrun 接下来,打开浏览器访问 http://127.0.0.1:8888/,你会看到一个写着 "Hello World"的网页。 分析Node.js 的 HTTP 服务器: 第一行请求(require)Node.js 自带的 http 模块,并且把它赋值给 http 变量。 接下来我们调用 http 模块提供的函数: createServer 。这个函数会返回 一个对象,这个对象有一个叫做 listen 的方法,这个方法有一个数值参数, 指定这个 HTTP 服务器监听的端口号。 六:NPM 使用介绍--------------------------------------------------------------------------------------------包管理工具 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用。 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。 1:由于新版的nodejs已经集成了npm,所以之前npm也一并安装好了。测试是否成功安装----------------------------npm -v $ npm -v 2.3.0 2: 如果你安装的是旧版本的 npm,可以很容易得通过 npm 命令来升级-----------------------------------------$ sudo npm install npm -g /usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js npm@2.14.2 /usr/local/lib/node_modules/npm 3:如果是 Window 系统使用以下命令即可:---------------------------------------------------------------npm install npm -g 4:使用淘宝镜像的命令:------------------------------------------------------------------------------cnpm install npm -g 使用 npm 命令安装模块: npm 安装 Node.js 模块语法格式-------------------------------------------------------------------npm install <Module Name> express安装:---------------------------------------------------------------------------------------npm install express 安装好之后,express 包就放在了工程目录下的 node_modules 目录中,因此在代码中只需要通过 require('express') 的方式就好,无需指定第三方包路径。 var express = require('express'); 全局安装:-----------------------------------------------------------------------------------------npm install express -g 1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),如果没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。 2. 可以通过 require() 来引入本地安装的包。 本地安装:-----------------------------------------------------------------------------------------npm install express 1. 将安装包放在 /usr/local 下或者你 node 的安装目录。 2. 可以直接在命令行里使用。 npm 的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有-g而已 如果出现以下错误: npm err! Error: connect ECONNREFUSED 127.0.0.1:8087 解决办法为: $ npm config set proxy null 如果你希望具备两者功能,则需要在两个地方安装它或使用----------------------------------------------------npm link。 接下来我们使用全局方式安装 express:------------------------------------------------------------------npm install express -g 安装过程输出如下内容,第一行输出了模块的版本号及安装位置。 express@4.13.3 node_modules/express ├── escape-html@1.0.2 ├── range-parser@1.0.2 ├── merge-descriptors@1.0.0 ├── array-flatten@1.1.1 ├── cookie@0.1.3 ├── utils-merge@1.0.0 ├── parseurl@1.3.0 ├── cookie-signature@1.0.6 ├── methods@1.1.1 ├── fresh@0.3.0 ├── vary@1.0.1 ├── path-to-regexp@0.1.7 ├── content-type@1.0.1 ├── etag@1.7.0 ├── serve-static@1.10.0 ├── content-disposition@0.5.0 ├── depd@1.0.1 ├── qs@4.0.0 ├── finalhandler@0.4.0 (unpipe@1.0.0) ├── on-finished@2.3.0 (ee-first@1.1.1) ├── proxy-addr@1.0.8 (forwarded@0.1.0, ipaddr.js@1.0.1) ├── debug@2.2.0 (ms@0.7.1) ├── type-is@1.6.8 (media-typer@0.3.0, mime-types@2.1.6) ├── accepts@1.2.12 (negotiator@0.5.3, mime-types@2.1.6) └── send@0.13.0 (destroy@1.0.3, statuses@1.2.1, ms@0.7.1, mime@1.3.4, http-errors@1.3.1) 查看安装信息----------------------------------------------------------------------------------------npm list -g ├─┬ cnpm@4.3.2 │ ├── auto-correct@1.0.0 │ ├── bagpipe@0.3.5 │ ├── colors@1.1.2 │ ├─┬ commander@2.9.0 │ │ └── graceful-readlink@1.0.1 │ ├─┬ cross-spawn@0.2.9 │ │ └── lru-cache@2.7.3 …… 如果要查看某个模块的版本号,可以使用命令如下:----------------------------------------------------------npm list grunt projectName@projectVersion /path/to/project/folder └── grunt@0.4.1 使用 package.json package.json 位于模块的目录下,用于定义包的属性。接下来让我们来看下 express 包的 package.json 文件,位于 node_modules/express/package.json 内容: Package.json 属性说明 name - 包名。 version - 包的版本号。 description - 包的描述。 homepage - 包的官网 url 。 author - 包的作者姓名。 contributors - 包的其他贡献者姓名。 dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下。 repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上。 main - main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js。 keywords - 关键字 卸载模块--------------------------------------------------------------------------------------------npm uninstall express 卸载后,你可以到 /node_modules/ 目录下查看包是否还存在,或者使用以下命令查看:-----------------------npm ls 更新模块--------------------------------------------------------------------------------------------npm update express 搜索模块--------------------------------------------------------------------------------------------npm search express 创建模块package.json 文件是必不可少的。我们可以使用 NPM 生成 package.json 文件--------------------------npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg> --save` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (node_modules) runoob # 模块名 version: (1.0.0) description: Node.js 测试模块(www.runoob.com) # 描述 entry point: (index.js) test command: make test git repository: https://github.com/runoob/runoob.git # Github 地址 keywords: author: license: (ISC) About to write to ……/node_modules/package.json: # 生成地址 { "name": "runoob", "version": "1.0.0", "description": "Node.js 测试模块(www.runoob.com)", …… } Is this ok? (yes) yes 以上的信息,你需要根据你自己的情况输入。在最后输入 "yes" 后会生成 package.json 文件。 接下来我们可以使用以下命令在 npm 资源库中注册用户(使用邮箱注册):--------------------------------------npm adduser Username: mcmohd Password: Email: (this IS public) mcmohd@gmail.com 接下来我们就用以下命令来发布模块:--------------------------------------------------------------------npm publish 版本号: 使用NPM下载和发布代码时都会接触到版本号。NPM使用语义版本号来管理代码,这里简单介绍一下。 语义版本号分为X.Y.Z三位,分别代表主版本号、次版本号和补丁版本号。当代码变更时,版本号按以下原则更新。 如果只是修复bug,需要更新Z位。 如果是新增了功能,但是向下兼容,需要更新Y位。 如果有大变动,向下不兼容,需要更新X位。 版本号有了这个保证后,在申明第三方包依赖时,除了可依赖于一个固定版本号外,还可依赖于某个范围的版本号。例如"argv": "0.0.x"表示依赖于0.0.x系列的最新版argv。 NPM支持的所有版本号范围指定方式可以查看官方文档。 NPM 常用命令 除了本章介绍的部分外,NPM还提供了很多功能,package.json里也有很多其它有用的字段。 除了可以在npmjs.org/doc/查看官方文档外,这里再介绍一些NPM常用命令。 NPM提供了很多命令,例如install和publish,使用npm help可查看所有命令。 NPM提供了很多命令,例如install和publish,使用npm help可查看所有命令。 使用npm help <command>可查看某条命令的详细帮助,例如npm help install。 在package.json所在目录下使用npm install . -g可先在本地安装当前命令行程序,可用于发布前的本地测试。 使用npm update <package>可以把当前目录下node_modules子目录里边的对应模块更新至最新版本。 使用npm update <package> -g可以把全局安装的对应命令行程序更新至最新版。 使用npm cache clear可以清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人。 使用npm unpublish <package>@<version>可以撤销发布自己发布过的某个版本代码。 使用淘宝 NPM 镜像 大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像。 淘宝 NPM 镜像是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。 你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm: $ npm install -g cnpm --registry=https://registry.npm.taobao.org 这样就可以使用 cnpm 命令来安装模块了: $ cnpm install [name] 更多信息可以查阅:http://npm.taobao.org/。 七:Node.js REPL(交互式解释器)------------------------------------------------------------------------------终端 Node.js REPL(Read Eval Print Loop:交互式解释器) 表示一个电脑的环境,类似 Window 系统的终端或 Unix/Linux shell,我们可以在终端中输入命令,并接收系统的响应。 Node 自带了交互式解释器,可以执行以下任务: 读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中。 执行 - 执行输入的数据结构 打印 - 输出结果 循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出。 Node 的交互式解释器可以很好的调试 Javascript 代码。 REPL: 启动 Node 的终端:-----------------------------------------------------------node 简单的表达式运算接下来让我们在 Node.js REPL 的命令行窗口中执行简单的数学运算: $ node > 1 +4 5 > 5 / 2 2.5 > 3 * 6 18 > 4 - 1 3 > 1 + ( 2 * 3 ) - 4 3 > 使用变量 你可以将数据存储在变量中,并在你需要的时候使用它。变量声明需要使用 var 关键字,如果没有使用 var 关键字变量会直接打印出来。 使用 var 关键字的变量可以使用 console.log() 来输出变量。 $ node > x = 10 10 > var y = 10 undefined > x + y 20 > console.log("Hello World") Hello World undefined > console.log("www.runoob.com") www.runoob.com undefined 多行表达式 Node REPL 支持输入多行表达式,这就有点类似 JavaScript。接下来让我们来执行一个 do-while 循环: $ node > var x = 0 undefined > do { ... x++; ... console.log("x: " + x); ... } while ( x < 5 ); x: 1 x: 2 x: 3 x: 4 x: 5 undefined > ... 三个点的符号是系统自动生成的,你回车换行后即可。Node 会自动检测是否为连续的表达式。 下划线(_)变量: 你可以使用下划线(_)获取上一个表达式的运算结果: $ node > var x = 10 undefined > var y = 20 undefined > x + y 30 > var sum = _ undefined > console.log(sum) 30 undefined > REPL 命令 ctrl + c - 退出当前终端。 ctrl + c 按下两次 - 退出 Node REPL。 ctrl + d - 退出 Node REPL. 向上/向下 键 - 查看输入的历史命令 tab 键 - 列出当前命令 .help - 列出使用命令 .break - 退出多行表达式 .clear - 退出多行表达式 .save filename - 保存当前的 Node REPL 会话到指定文件 .load filename - 载入当前 Node REPL 会话的文件内容。 停止 REPL---------------------------------------------------------------------ctrl + c 八:运行 打开终端,键入 node 进入命令交互模式,可以输入一条代码语句后立即执行并显示结果,例如: $ node > console.log('Hello World!'); Hello World! 如果要运行一大段代码的话,可以先写一个JS文件再运行。例如有以下 hello.js。 function hello() { console.log('Hello World!'); } hello(); 写好后在终端下键入 node hello.js 运行,结果如下: $ node hello.js Hello World! 权限问题: 在 Linux 系统下,使用 NodeJS 监听 80 或 443 端口提供 HTTP(S)服务时需要 root 权限,有两种方式可以做到。 一种方式是使用 sudo 命令运行 NodeJS。例如通过以下命令运行的 server.js 中有权限使用 80 和 443 端口。一般推荐这种方式,可以保证仅为有需要的 JS 脚本提供 root 权限。 $ sudo node server.js 另一种方式是使用 chmod +s 命令让 NodeJS 总是以 root 权限运行,具体做法如下。因为这种方式让任何JS脚本都有了 root 权限,不太安全,因此在需要很考虑安全的系统下不推荐使用。 $ sudo chown root /usr/local/bin/node $ sudo chmod +s /usr/local/bin/node 九:模块 编写稍大一点的程序时一般都会将代码模块化。在 NodeJS 中,一般将代码合理拆分到不同的 JS 文件中,每一个文件就是一个模块,而文件路径就是模块名。 在编写每个模块时,都有 require、exports、module 三个预先定义好的变量可供使用。 1:require:--------------------用于在当前模块中加载和使用别的模块:传入一个模块名,返回一个模块导出对象。模块名可使用相对路径(以./开头),或者是绝对路径(以/或C:之类的盘符开头)。模块名中的.js扩展名可以省略。 例: var foo1 = require('./foo'); var foo2 = require('./foo.js'); var foo3 = require('/home/user/foo'); var foo4 = require('/home/user/foo.js'); // foo1 至 foo4 中保存的是同一个模块的导出对象。另外,可以使用以下方式加载和使用一个 JSON 文件。 var data = require('./data.json'); 2:exports:---------------------对象是当前模块的导入对象:用于导入模块的公有方法和属性别的模块通过 require 函数使用当前模块时得到的就是当前模块的 exports 对象。 例:exports.hello = function(){ console.log('Hello word'); }; 3:module-------------------------通过对象可以访问到当前模块的一些相关信息:但最多的用途是替换当前模块的导出对象。例如模块导出对象默认是一个普通对象,如果想改成一个函数的话 使用以下方式。 module.exports = function () { console.log('Hello World!'); }; **以上代码中,模块默认导出对象被替换为一个函数。 模块初始化: 一个模块中的JS代码仅在模块第一次被使用时执行一次,并在执行过程中初始化模块的导出对象。之后,缓存起来的导出对象被重复利用。 主模块 通过命令行参数传递给 NodeJS 以启动程序的模块被称为主模块。主模块负责调度组成整个程序的其它模块完成工作。例如通过以下命令启动程序时,main.js 就是主模块。 $ node main.js 完整示例: 例如有以下目录。 - /home/user/hello/ - util/ counter.js main.js 其中 counter.js 内容如下: var i = 0; function count() { return ++i; } exports.count = count; 该模块内部定义了一个私有变量 i,并在 exports 对象导出了一个公有方法 count。 主模块 main.js 内容如下: var counter1 = require('./util/counter'); var counter2 = require('./util/counter'); console.log(counter1.count()); console.log(counter2.count()); console.log(counter2.count()); 运行该程序的结果如下: $ node main.js 可以看到,counter.js 并没有因为被 require 了两次而初始化两次。