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. 移动/联通APN提升

    绝大部分的时候信号满格速度特别慢 解决办法不一定对所有人有效可尝试一下 一般流程手机的设置-移动网络-移动数据-接入点名称(APN)-新建APN 中国移动如下配置 名称:随便写 APN:cmtds m ...

  2. C++ Protobuf

    Protobuf protobuf (protocol buffer) 是谷歌内部的混合语言数据标准.通过将结构化的数据进行序列化(串行化),用于通讯协议.数据存储等领域的语言无关.平台无关.可扩展的 ...

  3. 【MySQL】从入门到精通8-SQL数据库编程

    上期:[MySQL]从入门到精通7-设计多对多数据库 第零章:Mac用户看这里: mac终端写MySQL和windows基本相同,除了配置环境变量和启动有些许不同以外. 先配置环境变量,在终端输入vi ...

  4. C语言:多功能计算器 (矩阵相乘)

    好家伙,实现矩阵相乘功能 代码如下: void fifth()//矩阵的相乘// { int a[100][100],b[100][100]; int d,e,f,h,j,k,t; double su ...

  5. KingbaseES 如何开启并进入数据库

    关键字: KingbaseES.sys_ctl.ksql 一.数据库启动前环境检测 1.1 查看kingbase用户环境变量配置 图1-1 查看.bashrc环境变量配置 1.2 应用环境变量 [ki ...

  6. 字节跳动 DanceCC 工具链系列之Xcode LLDB耗时监控统计方案

    作者:李卓立 仲凯宁 背景介绍 在<字节跳动 DanceCC 工具链系列之Swift 调试性能的优化方案>[1]一文中,我们介绍了如何使用自定义的工具链,来针对性优化调试器的性能,解决大型 ...

  7. MinIO客户端快速入门指南

    官方文档地址:http://docs.minio.org.cn/docs/master/minio-client-quickstart-guide MinIO Client (mc)为ls,cat,c ...

  8. Logstash集成GaussDB(高斯DB)数据到Elasticsearch

    GaussDB 简介 GaussDB 数据库分为 GaussDB T 和 GaussDB A,分别面向 OLTP 和 OLAP 的业务用户. GaussDB T 数据库是华为公司全自研的分布式数据库, ...

  9. KVM里安装不是原装的winxp系统镜像

    从网上下载的winxp系统镜像,虽然是iso格式的,但是里面的内容是如下情况的 因此安装的话,需要采取如下步骤 1.添加一个光驱引导,挂载一个iso格式的pe 2.再添加一个光驱,挂载iso格式的wi ...

  10. kvm上已安装的虚拟机修改为桥接网络

    kvm上安装的虚拟机默认使用的nat网络格式,现在已经调整kvm主机为桥接方式了,但是已经安装的虚拟机还是nat方式,所以需要修改一下 让KVM虚拟主机使用桥接网络br0 修改虚拟机的配置文件,默认存 ...