nodejs学习(一)概念和相关介绍
一.Node.js简介
? Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境。
? Node采用Google开发的V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模。
? Node大部分基本模块都用JavaScript编写。在Node出现之前,JS通常作为客户端程序设计语言使用,以JS写出的程序常在用户的浏览器上运行。
? Node主要用于编写像Web服务器一样的网络应用,这和PHP
和Python是类似的。
? 但是Node与其他语言最大的不同之处在于,PHP等语言是阻塞的而Node是非阻塞的.
? Node是事件驱动的。开发者可以在不使用线程的情况下开发出一个能够承载高并发的服务器。其他服务器端语言难以开发高并发应用,而且即使开发出来,性能也不尽人意。
? 核心模块包括文件系统I/O、网络(HTTP、 TCP、 UDP、 DNS、TLS/SSL等)、二进制数据流、加密算法、数据流等等。 Node模块的API形式简单,降低了编程的复杂度。
? 使用框架可以加速开发。常用的框架有Express.js、 Socket.IO和Connect等。 Node.js的程序可以在Microsoft Windows、Linux、 Unix、 Mac OS X等服务器上运行。
? Node.js也可以使用CoffeeScript、 TypeScript、 Dart语言,以及其他能够编译成JavaScript的语言编程。
二.node目录结构
三.模块相关
1.模块引用
? 在规范中,定义了require()方法,这个方法接手模块标识,以此将一个模块引入到当前运行环境中。
? 模块引用的示例代码: – var math = require('math');
2.模块定义
? 在运行环境中,提供了exports对象用于导出当前模块的方法或者变量,并且它是唯一的导出的出口。
? 在模块中还存在一个module对象,它代表模块自身,而exports是module的属性。
? 在Node中一个文件就是一个模块。
3.模块定义
exports.xx=funtion(){}
module.exports={}
demo
被导入的模块: 2.js
/* 模块化 - 在Node中,一个js文件就是一个模块 - 在Node中,每一个js文件中的js代码都是独立运行在一个函数中 而不是全局作用域,所以一个模块的中的变量和函数在其他模块中无法访问 */
//这种打印的在导入的时候就会被运行 console.log("我是一个模块,我是02.module.js"); /* 我们可以通过 exports 来向外部暴露变量和方法 只需要将需要暴露给外部的变量或方法设置为exports的属性即可 * */ //向外部暴露属性或方法(只有这样,导入模块的代码才能访问当前(被导入)模块的方法和变量) exports.x = "我是模块2的x"; exports.y = "我是模块2的y"; exports.fn = function xx () { };
导入模块的代码: 3.js
//引入其他的模块
/*
在node中,通过require()函数来引入外部的模块
require()可以传递一个文件的路径作为参数,node将会自动根据该路径来引入外部模块
这里路径,如果使用相对路径,必须以.或..开头
使用require()引入模块以后,该函数会返回一个对象,这个对象代表的是引入的模块
我们使用require()引入外部模块时,使用的就是模块标识,我们可以通过模块标识来找到指定的模块
- 模块分成两大类
核心模块
- 由node引擎提供的模块
- 核心模块的标识就是,模块的名字
文件模块
- 由用户自己创建的模块
- 文件模块的标识就是文件的路径(绝对路径,相对路径)
相对路径使用.或..开头
*/
var md = require("./2");
var math = require("./math");
var fs = require("fs");
console.log(md);
console.log(math.add(123,456));
//console.log(fs);
4.模块标识
? 模块标识其实就是模块的名字,也就是传递给require()方法的参数,它必须是符合驼峰命名法的字符串,或者是以.、 ..开头的相对路径、或者绝对路径。
5.模块的实现
? Node中虽然使用的是CommonJS规范,但是其自身也对规范做了一些 舍。 ? 在Node中引入模块,需要经历如下3个步骤: – 路径分析 – 文件定位 – 编译执行 ? 在Node中,模块分为三类:一类是底层由C++编写的内建模块,一类Node提供的核心模块; 还有一类是用户编写的模块,称为文件模块。
说明:
var a = 10;
/*
在node中有一个全局对象 global,它的作用和网页中window类似
在全局中创建的变量都会作为global的属性保存
在全局中创建的函数都会作为global的方法保存
当node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码
function (exports, require, module, __filename, __dirname) {
在代码的最底部,添加如下代码
}
实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进了5个实参
exports
- 该对象用来将变量或函数暴露到外部
require
- 函数,用来引入外部的模块
module
- module代表的是当前模块本身
- exports就是module的属性
- 既可以使用 exports 导出,也可以使用module.exports导出
__filename
- 当前模块的完整路径
__dirname
- 当前模块所在文件夹的完整路径
* */
//console.log(global.a);
/*
arguments.callee
- 这个属性保存的是当前执行的函数对象
* */
console.log(arguments.callee + "");
console.log(arguments.length);
console.log(exports);
console.log(module.exports == exports);
console.log(__dirname);
6.包结构
? 包实际上就是一个压缩文件,解压以后还原为目录。符合规范的目录,应该包含如下文件:
– package.json 描述文件
– bin 可执行二进制文件
– lib js代码
– doc 文档
– test 单元测试
7.包描述文件
? 包描述文件用于表达非代码相关的信息,它是一个JSON格式的文件 – package.json,位于包的根目录下,是包的重要组成部分。
? package.json中的字段
– name、 description、 version、 keywords、maintainers、 contributors、 bugs、licenses、 repositories、 dependencies、homepage、
os、 cpu、 engine、 builtin、directories、 implements、 scripts、 author、bin、 main、 devDependencies。
8.NPM(Node Package Manager)
? CommonJS包规范是理论,NPM是其中一种实践。
? 对于Node而言,NPM帮助其完成了第三方模块的发布、安装和依赖等。借助NPM,Node与第三方模块之间形成了很好的一个生态系统。
9.NPM命令
? npm –v
– 查看版本
? npm
– 帮助说明
? npm search 包名
– 搜索模块包
? npm install 包名
– 在当前目录安装包
? npm install 包名 –g
– 全局模式安装包
? npm remove 包名
– 删除一个模块
? npm install 文件路径
– 从本地安装
? npm install 包名 –registry=地址
– 从镜像源安装
? npm config set registry 地址
– 设置镜像源