什么是Node.js?
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型,让JavaScript 运行在服务端的开发平台。(Node.js处理时是单线程,但是在后台拥有一个I/O线程池)
Node.js的用途
- Web服务API,比如REST
- 实时多人游戏
- 后端的Web服务,例如跨域、服务器端的请求
- 基于Web的应用
- 多客户端的通信,如即时通信
COMMONJS规范
ECMAScript标准的缺陷
- 没有模块化系统(es6有模块化)
- 标准库较少
- 没有标准接口
- 缺乏管理系统
COMMONJS规范对于模块的定义
-
模块引用
在node中,通过require()函数来引入外部的模块,require()可以传递一个文件的路径作为参数,node将会自动根据该路径引入外部模块。使用require()引入模块后,该函数会返回一个对象,这个对象代表的是引入的模块,需要定义变量来进行读取。
这里的路径,如果使用的是相对路径,必须以.
或..
开头,如果不写点的话,是在node_modules中寻找相应的包。
-
模块定义
在node中,一个js文件就是一个模块
在node中,每一个js文件中的js代码都是独立运行在一个函数中,而不是全局作用域,所以一个模块中的变量和函数在其他模块中无法访问。
我们可以通过exports函数来向外部暴露变量或方法,只需要将需要暴露给外部的变量或方法设置为exports的属性即可。
exports.x=5;
exports.fn=function(){};
-
模块标识
使用require()引入外部模块时,使用的就是模块标识,我们可以通过模块标识来找到指定的模块
模块分为两大类:
核心模块:由node引擎提供的模块;核心模块的标识就是模块的名字
eg:var fs = require(“fs”);
文件模块:由用户自己创建的模块;文件模块的标识就是文件的路径(绝对路径、相对路径)
全局变量&局部变量的验证
在node中有一个全局变量global,它的作用和网页中windows类似,在全局中创建的变量都会作为global的属性保存,在全局中创建的函数都会作为global的方法保存。
var a=111
是局部变量,是在函数里执行的。可以通过arguments来进行验证。
arguments是个类似数组但不是数组的对象。
arguments.callee:保存当前执行的函数对象
node在执行模块中的代码时,它会首先在代码的最顶部,添加如下代码:
function (exports, require, module, __filename, __dirname) {
在代码的最底部添加如下代码:
}
实际上模块中的代码都是包装在一个函数中执行的,并且在函数执行时,同时传递进了5个实参:
exports:该对象用来将变量或函数暴露到外部
require:函数,用来引入外部的模块
module:代表的是module的属性,exports是module的属性,即exports=module.exports
__filename:当前模块的完整路径
__dirname:当前模块所在文件夹的完整路径
module.exports与exports的区别
module.exports = {
name:"杨洋",
age:30,
sayName:function(){
console.log("我是杨洋^_^");
}
};
exports = {
name:"杨洋",
age:30,
sayName:function(){
console.log("我是杨洋^_^");
}
};
举例描述:
- 通过exports只能使用.的方式来向外暴露内部变量
- module.exports既可以通过.的形式,也可以直接赋值
package(包)
CommonJS的包规范
CommonJS的包规范由包结构和包描述文件两个部分组成
- 包结构:用于组织包中的各种文件
- 包描述文件:描述包的相关信息,以供外部读取分析
包实际上就是一个压缩文件,解压以后还原为目录。符合规范的目录,应该包含如下文件:
- package.json 描述文件
- bin 可执行二进制文件
- lib js代码
- doc 文档
- test 单元测试
包描述文件用于表达非代码相关的信息,它是一个JSON格式的文件——package.json,位于包的根目录下,是包的重要组成部分。package.json中不能出现注释。
NPM(Node Package Manager)
对于Node而言,NPM帮助其完成了第三方模块的发布、安装和依赖等。借助NPM,Node与第三方模块之间形成了很好的一个生态系统。
NPM命令:
-
npm version //查看所有模块版本
-
npm search 包名 //搜索模块包
-
npm install 包名 //在当前目录安装包,i是install的简写
-
npm install 包名 --save //安装包并添加到依赖中(常用!,新版本不需要save即可添加依赖)
-
npm install //下载当前项目所依赖的包
-
npm install 包名 -g //全局安装包(全局安装的包一般都是一些工具)
-
npm init //在当前目录下创建package.json
-
npm remove 包名 //删除包,r是remove的简写
注:学习参考来源b站【尚硅谷】最经典Node.js全套完整版教程(超哥yyds!!!!)