node
1.0CommonJS规范
1.0nodejs与commonjs之间的关系:
nodejs是一种服务器语言。
commonjs是nodejs的规范。
2.0commonjs规范的意义:
虽然nodejs的语法层面是用js来写的,但是js的标准ECMAScript存在太多的缺陷,它只是规范了javascript中的词法、类型、表达式、方法、对象等基本要素,所以javascript本身是存在的缺点:
1)没有模块系统(不方便扩展)
2)标准库较少,对于文件系统,I/O流等常见的需求没有标准的API
3)没有标准接口,缺少如:WEB胳器,数据库的统一接口
。。。。。。
而nodejs作为一门后台语言,它必须有自己的很多基本功能,而这些功能需要有人来规范有,commonjs就是起的这样一个规范,它规范了:
1)javascript必须像后台语言一样具有拥有开发大型web服务器的有能力
2)commonjs覆盖了:二进制、字符集编码、I/O流、web服务器…..
3)规范了模块与模块之间的引用关系
所以commonjs是nodejs的一个规范,它的规范使得nodejs具有的开发服务器的可能。
2.0核心模块
什么叫核心模块:commonjs规定的好的功能在nodejs实现了,这样的一些模块我们叫做核心模块。也就是说nodejs中所有文档中给出的api都是核心模块,而我自己写的模块我们称为用户模块
2.1核心模块Path
作用:用于帮助程序员来操作硬盘上的路径。
核心模块注意点:当引用核心模块的时候直接require(‘模块名’),不需要加任何路径或者后缀。
Path中的常用API:
dirname(路径):
//获取传入路径中文件的路径
basename(路径):
//如果不传入任何参数:直接获取到传入路径中文件的全名称(文件名+扩展名)
//如果传入文件对应的后缀,会将后缀名去掉(传错与不传相同)
extname(路径):
//获取传入路径中文件的扩展名
join():
//将多个路径组装成一个路径,不管路径是否标准,路径中存在../这个方法也可以识别。
parse(路径)
//返回值是一个对象
//将传入的路径进行拆分,将路径的各个部分以对象属性的形式返回
format(路径对象);
//返回一个字符串
//将一个路径对象传入,返回一个路径的字符串
注意:win下的路径最好加上反斜杠,max系统下不用关注。
Path中的非常用API:
delimiter:
//分隔符:如果在win系统下为’;’,在其它系统下为’:’
isAbsolute(路径):
//判断一个路径是否是一个绝对路径
normalize(路径):
//将一个非标准路径转换成一个标准路径
relative(form路径,to路径):
//form路径到to路径要的查找过程
sep:
//在win系统下得到”分隔符,在其它系统下面得到’/’分隔符
posix:
//所有的路径方法的一个集合
2.2核心模块url
作用:用于操作请求的路径
url常用API:
url.parse(路径);
url.format(路径对象)
2.3核心模块querystring
作用:对请求参数的处理
querystring常用API:
querystring.parse();
//将一个参数字符串转为对象
querystring.stringify();
//将一个对象转为字符串
querystring.escape(url)
//将url中的汉字进行转码
querystring.unescape(url)
//将url中被转码的汉字重新转为汉字
3.0文件模块:
3.1什么是文件模块:
nodejs中的核心模块都集成到了node.exe之中,将来不管是引用还是使用都非常方便,但是有node.exe之中给我们准备的模块有限,有很多功能没有被包含在核心模块之中。所以在实际开发过程中我们会根据自己的需求去开发一个自己模块。像这种模块没有集成到node中的自己开发的模块我们叫做文件模块,或者叫做用户模块,再或者是第三方包模块。
特点:核心模块的运行效率永远要高于文件模块,本质的原因是nodejs在运行起来以后核心模块就已经加载到内存中了,而文件模块还要先读取出来,再转成二进制数据去执行,速度自然会慢好多。
实用技巧:node有一个用户模块 区npmjs,我们可以去上面下载一些别人开发好的模块,或者将自己写好的模块放到npmjs之中.
3.2案例:如何自己开发一个文件模块(自己开发一个计算器)。
过程:
一版本:
直接开发一个js文件,开发出需要的计算功能,使用另一个js文件去引用,但是如果将来再次加入其它的功能,又需要再加入另一个文件,开发对应的功能,再次用使用的js文件去引用,太麻烦了,为了能够让结构代码更加的清晰,我们将所有的文件约定好放在同一个文件夹node_modules中
注意点:
1)nodejs是定义模块不需要关键字define,其它跟js中的模块化一样
2)引用文件模块可以时路径中可以不加后缀
二版本:
用一个node_modules文件夹将所有文件模块放入其中(注意:这个node_module文件夹非常重要,将来开发过程中所有的文件模块都是放到这个文件下的)。但是如果将来我们开发的内容不仅仅是限于一个计算功能,可能还会有其它功能,比如说登录注册功能,那么一个node_modules下面放的文件就相当于有两种类型的文件了,为了将这两种类型的文件区分开。我们给每个类型的功能单独建立一个文件夹,来管理对应的模块,并且为每个在每个文件夹中设置一个对面的文件(像这样 的一个文件在nodejs我们将它称作包,一个包是多个js文件或者说js模块组成的,并且具有一个统一的出口文件,并且出口文件一般情况下名称定义为index.js)(图解)。
三版本:
写好包以后如果要使用还要直接去引包的出口文件,这样改造后的出口文件一般情况下路径很长,为了操作方便。我们不会再去引全路径,而是会直接引用的require上面放上包名以此来导入包,虽然路径没有写全,但是运行以后发现文件还是正常的,说明nodejs在执行require(‘包名’)是有自己的过程的
3.3 nodejs引包的过程
步骤一:当nodejs执行到require(‘包名’)的时候会先将这个包名当作核心模块来识别,
步骤二:但是发现这个包并不是核心模块时,会自动去node_modules文件中查找文件名为这个包名的文件夹
步骤二点五:如果找到这个包,且包中有一个叫做package.json的文件,nodejs会根据package.json中的main属性去找到对应的入口文件
步骤三:如果没有package.json文件就直接去包中找一个名称为index.js的模块,并加载出来
步骤四:如果都没有找到,就 错
3.4package.js文件:
作用:给当前包设置一些重要参数。
生成package.js文件:关键指令npm init -y
在包文件夹下打开CMD,输入上面指令,会自动在这个目录下面生成一个package.json文件
文件内容:
{
“name”: “js”,
“version”: “1.0.0”,
“description”: “”,
“main”: “abc.js”,
“scripts”: {
“test”: “echo “Error: no test specified”” && exit 1″”
}
“”author””: “”””
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!