1、前言

对于各种编程语言,代码组织是很重要的。而模块是node中的代码组织机制,node中的很多功能都以模块划分,而模块中又封装了许多方法,而且不会改变全局作用域,极大的方便了各开发者的需求。

2、模块操作

2.1 自定义模块

举个例子:

hello.js

var daysarr = new Array('星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日');
var now = new Date();
var day = now.getDay();
exports.sayhello= function (name) {
console.log('你好!' + name);
console.log('今天是' + daysarr[day - 1]);
};

test.js

let hello = require('./hello')
hello.sayhello("Tom")

运行结果:
你好!Tom
今天是星期二

上面的hello.js中,exports对象只设置了一个sayhello属性,因此,导入该模块的只能访问sayhello方法,而不能访问daysarr ,now等私有变量。

2.2 模块的导入和定义

2.2.1 模块的导入

通常我们导入模块使用require()方法,该方法中需要明确文件路径,可以是相对路径或绝对路径,JS文件的扩展名可省略不写。如:

let hello = require('./hello')
hello.sayhello("Tom")

注意:require是同步操作。通常只在程序加载是使用require,因此模块在文件顶部导入

2.2.2 模块的定义

使用module.exports定义模块
举个例子,四则运算的实现:

math.js

module.exports={
add:function(a,b){
return a+b
},
sub:function(a,b){
return a-b;
},
mul:function(a,b){
return a*b
},
dev:function(a,b){
return a/b
}
}

test.js

let methods = require('./math')
console.log(methods.sub(1,2))
console.log(methods.add(1,2))
console.log(methods.mul(1,2))
console.log(methods.dev(1,2))

运行结果:
-1
3
2
0.5

2.3 module.exports与exports的关系

exports只是对module.exports的一个全局引用。最终返回给程序调用的是module.exports,若创建了一个既有module.exports又有exports的模块,那么exports就不起作用了。

2.4 模块加载顺序

  • 从缓存加载
  • 加载核心模块
  • 加载文件模块
  • 文件夹作为模块
  • 从node_modules目录加载
  • 从全局加载
  • 循环加载

3、OS模块

3.1 功能

OS模块提供了基本的系统操作方法

3.2 常用方法

方法 描述
os.type() 查询操作系统类型
os.hostname() 查询操作系统的主机名
os.uptime() 查询操作系统的上线时间(秒)
os.platform() 查询操作系统平台名称
os.totalmem() 查询系统内存总量(字节)
os.freemem() 查询空闲内存量(字节)
os.cpus() 查询CPU内核信息
os.constants() 返回一个包含错误码,处理信号等通用的操作系统特定常量对象

3.3 示例

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());
console.log("系统上线时间是:" + os.uptime() + '秒')

运行结果:
操作系统类型:Windows_NT
操作系统平台: win32
系统内存总量:12729044992 字节
空闲内存量:6448615424 字节
CPU信息:[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
系统上线时间是:301526秒

4、util模块

4.1 功能

util模块只要用于支持node中API的需求,提供的使用工具。

4.2 常用方法

方法 描述
util.inspect(object[,options]) 返回字符串表示,主要用于调试
util.format(format[,...args]) 返回一个格式化后的字符串,format表示一个类似printf的格式化字符串,包括占位符。如果第一个参数不是字符串,则返回一个将所有参数用空格分格并连在一起的字符串。

4.3 示例

const util= require('util');
console.log(util.format(1,2,3));

运行结果:
'1 2 3'

5、path模块

5.1 功能

path模块用于处理和转换文件路径

5.2 常用方法

方法 描述
path.normalize(path) 格式化路径
path.join([...path]) 连接路径
path.resolve([...path]) 将一个路径或路径片段解析成一个绝对路径
path.extname(path) 获取扩展名
path.join(path) 连接路径

5.3 示例

const path = require('path');
let file = "file.js"
console.log(path.resolve(file))

运行结果:
D:\code\Workspace\node_projects\work\file.js

6、url模块

6.1 功能

url模块用于URL处理和解析

6.2 常用方法

方法 描述
url.hash 获取及设置 URL 的片段部分
url.host 获取及设置 URL 的主机部分
url.href 获取及设置序列化的 URL
url.username 获取及设置 URL 的用户名部分
url.hostname 获取及设置 URL 的主机名部分。 url.host 和 url.hostname 之间的区别是 url.hostname 不包含端口。
url.password 获取及设置 URL 的密码部分
url.port 获取及设置 URL 的端口部分
url.protocol 获取及设置 URL 的协议部分
url.search 获取及设置 URL 的序列化查询部分
url.toString() 在 URL 对象上调用 toString() 方法将返回序列化的 URL。 返回值与 url.href 和 url.toJSON() 的相同
url.toJSON() 在 URL 对象上调用 toJSON() 方法将返回序列化的 URL。 返回值与 url.href 和 url.toString() 的相同

7、fs模块

7.1 功能

fs模块可用于读写本地文件和目录,所有的fs操作都具有同步的、回调的、以及基于 promise 的形式

7.2 常用方法

方法 描述
fs.mkdir 创建目录
fs.readdir 查看目录的内容
fs.appendFile 追加文件
fs.createReadStream 读取文件,两个参数,第一个为读取文件的路径,第二个为highWaterMark 最高水位线,默认最多读取64K
fs.open 打开文件
fs.readFile 异步读取文件
fs.readFileSync 同步读取文件
fs.unlink 异步删除文件
fs.unlinkSync 同步删除文件
fs.copyFile 异步复制文件
fs.rename 文件重命名
fs.stat 获取文件信息
fs.watch 侦听目录的改变
fs.watchFile 侦听文件的改变

7.3 示例:更改文件内容

要求:
1、把person.json中的钱七的年龄更新为35岁。
2、将新记录['王五','18'],['张三','28'] 把person.csv文件里。

首先要先安装OS模块
npm install os --save

person.json

[
{
"name": "张三",
"ages": 9999
},
{
"name": "李四",
"ages": 25
},
{
"name": "王五",
"ages": 30
},
{
"name": "赵六",
"ages": 24
},
{
"name": "钱七",
"ages": 22
}
]

新建index.js文件

const fs = require("fs")
fs.readFile("person.json", "utf8", function (err, res) {
if (err) throw err
let data = JSON.parse(res)
for (var i = 0; i < data.length; i++) {
if (data[i].name == "钱七") {
data[i].ages = 35
}
}
console.log(data);
})
fs.readFile("person.csv", "utf8", function (err, res) {
if (err) throw err
let data = ['王五', '18'].toString() + "\n" + ['张三', '28']
fs.writeFile("person.csv", data, function (err) {
if (err) throw err
console.log("数据写入成功");
})
})

运行结果:
[
{ name: '张三', ages: 9999 },
{ name: '李四', ages: 25 },
{ name: '王五', ages: 30 },
{ name: '赵六', ages: 24 },
{ name: '钱七', ages: 35 }
]
数据写入成功
再来看看这两个文件内容是否改变。
person.json

[
{
"name": "张三",
"ages": 9999
},
{
"name": "李四",
"ages": 25
},
{
"name": "王五",
"ages": 30
},
{
"name": "赵六",
"ages": 24
},
{
"name": "钱七",
"ages": 35
}
]

person.csv

王五,18
张三,28

这就完成了这些修改。

7.4 需要注意

在读取文件时,可以使用文件系统标识,如:
r+ 表示以读写模式打开,文件不存在则抛出异常
w+ 表示以读写模式打开,文件不存在则创建,等等。

8、npm 以及包的使用

8.1 npm简介

  • npm即node package manager , 包管理工具。全球开发者社区,包含全球所有包(框架、插件)
  • 包是一组 模块组合成的一套工具,例如: jquery 、 bootstrap 、 less 、 express

8.2 npm的安装和使用

  • 由于npm 已经集合在 node 安装包内,因此在我们安装好node时就已经默认安装了npm 了。
  • 可以通过:npm -v (查看版本)查看是否安装好
  • 在创建node项目时,可通过npm init 初始化命令生成 配置文件 package.json,再通过npm install --save安装所需要的包
  • npm 的服务器在海外,所以下载速度 理论上会比较慢。可以通过安装 cnpm(npm install -g cnpm --registry=https://registry.npm.taobao.org)和修改淘宝镜像源(npm config set registry https://registry.npm.taobao.org)来解决
  • 在cmd中执行npm config set prefix"node_global 路径名",和npm config set cache "node_cache 路径名"可以实现npm包默认安装位置。

node 学习笔记 模块和包的管理与使用的更多相关文章

  1. Python 2.7 学习笔记 模块和包

    我们来考虑下如下几种场景: 1.编写一个python程序,如果程序比较简单,则可以把代码放到一个python文件中.但如果程序功能比较多,可能需要多个python文件来组织源代码.而这些文件之间的代码 ...

  2. node学习笔记2 —— npm包管理

    全局模式安装包 将包安装为全局可用的可执行命令, 并非可以从任意地方require 将 package.json中bin定义的文件软链到统一的目录下, 该目录可以通过如下方式推算出来: path.re ...

  3. python学习笔记-模块和包

    模块导入方法 1.import 语句 import module1[,module2[,...moduleN]] 当我们使用import语句的时候,Python解释器是怎么找到对应对文件对呢?答案是解 ...

  4. [转帖]Linux学习笔记之rpm包管理功能全解

    Linux学习笔记之rpm包管理功能全解 https://www.cnblogs.com/JetpropelledSnake/p/11177277.html rpm 的管理命令 之前学习过 yum 的 ...

  5. node.js中模块和包

    node.js中模块和包 什么是模块 如何创建并加载模块 1. 创建模块 2. 单次加载 3. 覆盖 exports 如何创建一个包 1. 作为文件夹的模块 2. package.json 如何使用包 ...

  6. Node学习HTTP模块(HTTP 服务器与客户端)

    Node学习HTTP模块(HTTP 服务器与客户端) Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端.http.Server 是一个基 ...

  7. node 学习笔记 - Modules 模块加载系统 (1)

    本文同步自我的个人博客:http://www.52cik.com/2015/12/11/learn-node-modules-path.html 用了这么久的 require,但却没有系统的学习过 n ...

  8. Node学习笔记之模块实现

    一.模块分类 由Node提供的模块,称为核心模块:部分核心模块在Node源代码的编译过程中,编译进了二进制执行文件.在node进程启动时,该部分就直接加载进内存,文件定位和编译执行的步骤可以省略掉,并 ...

  9. node学习笔记(二)(ajax方式向node后台提交数据)

    通过ajax向node后台提交数据过程(附手写前后台代码),并总结post与get的区别 POST 前台代码 //CSS简单给点样式 <style> form{ width: 200px; ...

随机推荐

  1. HTTPS 一定是安全的吗?

    大家好,我是小林. 上周有位读者在面字节时被问道这么一个问题:HTTPS 一定安全可靠吗? 这个问题的场景是这样的:客户端通过浏览器向服务端发起 HTTPS 请求时,被「假基站」转发到了一个「中间人服 ...

  2. ettercap之dns欺骗攻击

    前言:攻击机(kali)和受害机(win7)需在同一网段下 1.首先创建一个钓鱼克隆网站,这里我就利用CS来弄了 2.对Ettercap的dns文件进行编辑 3.开启ettercap 4.去受害机看看 ...

  3. Crash的数字表格 (莫比乌斯反演)

    Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b ...

  4. 做自动化测试选择Python还是Java?

    你好,我是测试蔡坨坨. 今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言. 前言 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的 ...

  5. KingbaseFlySync V1R6 管控平台Linux命令行安装

    关键字: KingbaseFlySync.KingbaseES.Linux.x86_64.mips64el.aarch64.Java 管控平台: Web管控平台(Manager.Console.Com ...

  6. 新一代网络请求库:python-httpx库

    目录 httpx库 一. 概述 1. 简介 2. 命令行模式 3. 快速开始 3.1 get请求 3.2 post请求 3.2.1 表单 3.2.2 文件 3.2.3 JSON 3.2.4 二进制 3 ...

  7. losf命令详解

    一.概念:lsof全名list opened files,也就是列举系统中已经被打开的文件,进程打开的端口(TCP.UDP).linux环境中,任何事物都是文件,设备是文件,目录是文件,甚至socke ...

  8. 8.第七篇 验证kube-apiserver及kubeconfig配置详解

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483818&idx=1&sn=7572b791 ...

  9. SonarQube支持Gitlab授权登录

    部署好SonarQube之后,由于我们内部使用的是自建的Gitlab仓库,即每个开发同学都有Gitlab账号,SonarQube我们就可以使用上Gitlab登录,这样就不需要再维护一套用户体系了. S ...

  10. 在 Traefik 中使用 Kubernetes Gateway API

    文章转载自:https://mp.weixin.qq.com/s/QYy8ETBB-xqU0IMI7YuTWw Gateway API(之前叫 Service API)是由 SIG-NETWORK 社 ...