【Node.js模块化---学习小结(2)】

一、NodeJS的模块系统

1、为什么使用模块

(1)提供代码的使用效率和可读性。将相应的程序封装在模块中

(2)通过模块打包程序不会改变原有的全局作用域

(3)模块可以发布到npm仓库中与他人共享

2、自定义模块

(1)遵循CommonJS规范,用于服务器端开发,不用考虑非同步方式

A、CommonJS是一套代码规范,目的是为了构建JavaScript在浏览器之外的生态系统 (服务器端, 桌面端)

B、CommonJS的主要内容:
a、模块必须通过 module.exports 导出对外的变量或接口
b、通过 require() 来导入其他模块的输出到当前模块作用域中(模块一般在文件的顶部导入)。

☀️举个例子( module.exports 导出):

自定义模块:demo.js 代码

module.exports.name='西安邮电'
module.exports.age=78
module.exports.getName=function(){
    console.log('姓名:'+this.name)//this表示当前模块的name变量所对应的值,也就是西安邮电
}
module.exports.getAge=function(){
    console.log('年龄:'+this.age)
}

app.js导入demo.js这个模块:

//是指将demo.js自定义的这个整个模块导入,就是将里面的变量和方法都导进来,然后创建一个对象去引用
var person =require('../module/demo.js')
person.getName()
person.getAge()
console.log(person.name)

运行结果:
在这里插入图片描述

(2)exports和module.exports的关系

☀️举个例子(exports导出):

自定义模块:hello.js 代码:

var show_day=new Array('星期一','星期二','星期三','星期四','星期五','星期六','星期七')
var nowTime =new Date()
var day=nowTime.getDay()
exports.sayHello=function(name){
    console.log('你好,'+name)
    console.log('今天是'+show_day[day-1])
}

test.js导入hello.js这个模块:

var Hello =require('../module/hello')
Hello.sayHello('张三丰')

运行结果:
在这里插入图片描述
改造:
自定义模块:hello.js 代码:

var show_day=new Array('星期一','星期二','星期三','星期四','星期五','星期六','星期七')
var nowTime =new Date()
var day=nowTime.getDay()
/* exports.sayHello=function(name){
    console.log('你好,'+name)
    console.log('今天是'+show_day[day-1])
} */
function Hello(name){//Hello是一个构造方法
    this.name=name
    this.sayHello =function(){
    console.log('你好,'+this.name)
    console.log('今天是'+show_day[day-1])
    }
} 
module.exports= Hello//导出一个构造方法名字Hello,也就是hello类 */

test.js导入hello.js这个模块:

var Hello =require('../module/hello')
var hello =new Hello('张无忌')//实例化后才可以调用方法
hello.sayHello()

同样也可以输出相同的结果(推荐此方法):
在这里插入图片描述
关系:

A、exports在模块的文件级别作用域内有效,它在模块被执行前被赋予module.exports的值。

B、exports只是对module.exports的一个全局引用

区别

C、使用exports导出的方法返回的是模块函数,可以直接调用

D、使用module.exports导出的方法返回的是一个类,需实例化为对象之后才可以调用

3、模块的加载顺序

(1)从缓存中加载

(2)加载核心模块

(3)加载文件模块

(4)文件夹作为模块

(5)从node_modules目录加载

(6)从全局目录加载

二、NodeJS的核心模块

1、os模块:提供基本的计算机系统操作的方法

(1)使用方式:

const os = require(‘os’)

(2)常用方法

type():返回操作系统的类型

platform():返回操作系统的平台

totalmem():返回内存空间

freemem():返回空闲的内存空间

cpus():返回CPU的信息

☀️举例说明:

const os=require('os')
console.log('操作系统的类型:'+os.type())
console.log('操作系统的平台:'+os.platform())
console.log('内存总量:'+os.totalmem())
console.log('空闲内存:'+os.freemem())
console.log('CPU:'+os.cpus())

在这里插入图片描述由上图可知:我有8g的内存(内存越大,所存储的东西越多,cpu一次取得数据就多,系统运行速度就越快),空闲内存是2.9g,8核cpu

2、util模块:实用工具模块

(1)使用方式:

const util = require(‘util’)

(2)常用方法:

format():返回格式化的字符串

const util=require('util')
var t='----'
var str=util.format('%s'+t+'%s','西安邮电大学','长安校区')//%S是一个格式字符串,format/* 对字符串进行格式化 */
console.log(str)

在这里插入图片描述

3、path模块:处理和转换文件路径(处理不同平台的路径问题)

(1)使用方式:

const path = require(‘path’)

(2)属性

path.delimiter:提供平台特定的路径分隔符

path.sep:提供平台特定的路径分段分隔符

强调:因为’\‘具有转义字符的含义,所以在win32平台下用字符串表示一个路径时,通常使用的路径分段分隔符为’\\’

‘c:\\demo\\code’

(3)常用方法

path.normalize():路径格式化

path.parse(path):返回完整路径的一个对象

const path =require('path')
console.log(path.delimiter)//win32平台下的路径分隔符;
console.log(path.sep)  //win32平台下的路径的分段分隔符是‘\’
console.log(path.normalize('/test/tt/t1/t2'))
console.log(path.parse('./app.js'))//返回完整路径的一个对象

在这里插入图片描述

4、URL(统一资源定位符)模块:用于对url的解析和处理

前提小知识:

绝对URI
比如:‘http://user:pass@www.example.com:80/dir/index.html?uid=1#ch1’
协议 登录信息 服务器地址 端口 文件路径 查询字符串 片段标示符
URI :Uniform Resource Identifier,统一资源标识符;
URL:Uniform Resource Locator,统一资源定位符;
URN:Uniform Resource Name,统一资源名称。
其中,URL,URN是URI的子集。

(1)使用方式:

 const url = require('url') //传统方式
		   
 const { URL } = require('url') //新的WHATWG API(标准的新的API) 

(2)常用方法

   url.parse('url') //传统方式:将url解析成对象
		   
   new URL('url') //新的WHATWG API(标准的新的API) 

☀️举个例子(传统):

const url=require('url')//传统方式
var myUrl =url.parse('http://users:pass@sub.host.com:8080/p/a/t/h?query=string#hash')//传统方式
console.log(myUrl)

在这里插入图片描述
☀️举个例子(新的):

const{URL}=require('url')//新的WHATWG API(标准的新的API)
var myUrl=new URL('http://users:pass@sub.host.com:8080/p/a/t/h?query=string&addr=西安#hash')//新的
console.log(myUrl)

在这里插入图片描述
Url基础指点:

属性说明
protocol表示url采用的什么协议
slashes表示是否有斜线
host表示主机
post表示端口(默认80端口不显示)
hostname表示主机名称
hash指的是#号后的内容包含#(锚点)
search指的是?后#前的内容,包含?(查询字符串参数)
query指的是search不包含?的内容(给http服务器发送数据)
pathname指的是路径名称,一般指主域名之后的内容(‘/返回自己的路径名/’)
path路径
href代表未解析的url地址

5、querystring模块:解析和处理URL中的查询字符串

(1)使用方式:

const querystring = require('querystring')

(2)常用方法:

方法说明
querystring.parse()将一个URL查询字符串解析成一个键值对的集合
querystring.stringify(obj[, sep[, eq[, options]]])将一个对象转换成URL查询字符串

☀️举个例子:

const{URL}=require('url')//新的WHATWG API(标准的新的API)
const querystring=require('querystring')
var myUrl=new URL('http://users:pass@sub.host.com:8080/p/a/t/h?query=string&addr=西安#hash')//新的
console.log(myUrl)
console.log(myUrl.searchParams.get('addr'))
var qs=querystring.parse(myUrl.search)
console.log(qs)
var temp={
      id:'12345',
      hobby:'AA',
      addr:'BB'
}
console.log(querystring.stringify(temp))

在这里插入图片描述

三、NodeJS的包管理器 ---- npm(Node Package Manager)

1、使用npm安装模块后,会自动生成node_modules文件夹,将安装的模块存放在该文件夹中会自动生成package.json文件,给出的项目运行的依赖关系(项目中的模块、版本号)

2、常用指令:

(1)升级npm:参数-g表示全局安装

npm install npm -g

(2)安装模块

npm install 模块名称@版本号 安装参数

(3)卸载模块

npm uninstall 模块名称

(4)将npm定向到淘宝镜像(本地的,所以运行更快)

npm install -g cnpm --registry=https://registry.npm.taobao.org

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值