node 学习笔记 模块和包的管理与使用

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包默认安装位置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

likepoems

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值