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包默认安装位置。
node 学习笔记 模块和包的管理与使用的更多相关文章
- Python 2.7 学习笔记 模块和包
我们来考虑下如下几种场景: 1.编写一个python程序,如果程序比较简单,则可以把代码放到一个python文件中.但如果程序功能比较多,可能需要多个python文件来组织源代码.而这些文件之间的代码 ...
- node学习笔记2 —— npm包管理
全局模式安装包 将包安装为全局可用的可执行命令, 并非可以从任意地方require 将 package.json中bin定义的文件软链到统一的目录下, 该目录可以通过如下方式推算出来: path.re ...
- python学习笔记-模块和包
模块导入方法 1.import 语句 import module1[,module2[,...moduleN]] 当我们使用import语句的时候,Python解释器是怎么找到对应对文件对呢?答案是解 ...
- [转帖]Linux学习笔记之rpm包管理功能全解
Linux学习笔记之rpm包管理功能全解 https://www.cnblogs.com/JetpropelledSnake/p/11177277.html rpm 的管理命令 之前学习过 yum 的 ...
- node.js中模块和包
node.js中模块和包 什么是模块 如何创建并加载模块 1. 创建模块 2. 单次加载 3. 覆盖 exports 如何创建一个包 1. 作为文件夹的模块 2. package.json 如何使用包 ...
- Node学习HTTP模块(HTTP 服务器与客户端)
Node学习HTTP模块(HTTP 服务器与客户端) Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端.http.Server 是一个基 ...
- node 学习笔记 - Modules 模块加载系统 (1)
本文同步自我的个人博客:http://www.52cik.com/2015/12/11/learn-node-modules-path.html 用了这么久的 require,但却没有系统的学习过 n ...
- Node学习笔记之模块实现
一.模块分类 由Node提供的模块,称为核心模块:部分核心模块在Node源代码的编译过程中,编译进了二进制执行文件.在node进程启动时,该部分就直接加载进内存,文件定位和编译执行的步骤可以省略掉,并 ...
- node学习笔记(二)(ajax方式向node后台提交数据)
通过ajax向node后台提交数据过程(附手写前后台代码),并总结post与get的区别 POST 前台代码 //CSS简单给点样式 <style> form{ width: 200px; ...
随机推荐
- HTTPS 一定是安全的吗?
大家好,我是小林. 上周有位读者在面字节时被问道这么一个问题:HTTPS 一定安全可靠吗? 这个问题的场景是这样的:客户端通过浏览器向服务端发起 HTTPS 请求时,被「假基站」转发到了一个「中间人服 ...
- ettercap之dns欺骗攻击
前言:攻击机(kali)和受害机(win7)需在同一网段下 1.首先创建一个钓鱼克隆网站,这里我就利用CS来弄了 2.对Ettercap的dns文件进行编辑 3.开启ettercap 4.去受害机看看 ...
- Crash的数字表格 (莫比乌斯反演)
Crash的数字表格 Description 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时被a和b ...
- 做自动化测试选择Python还是Java?
你好,我是测试蔡坨坨. 今天,我们来聊一聊测试人员想要进阶,想要做自动化测试,甚至测试开发,如何选择编程语言. 前言 自动化测试,这几年行业内的热词,也是测试人员进阶的必备技能,更是软件测试未来发展的 ...
- KingbaseFlySync V1R6 管控平台Linux命令行安装
关键字: KingbaseFlySync.KingbaseES.Linux.x86_64.mips64el.aarch64.Java 管控平台: Web管控平台(Manager.Console.Com ...
- 新一代网络请求库: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 ...
- losf命令详解
一.概念:lsof全名list opened files,也就是列举系统中已经被打开的文件,进程打开的端口(TCP.UDP).linux环境中,任何事物都是文件,设备是文件,目录是文件,甚至socke ...
- 8.第七篇 验证kube-apiserver及kubeconfig配置详解
文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483818&idx=1&sn=7572b791 ...
- SonarQube支持Gitlab授权登录
部署好SonarQube之后,由于我们内部使用的是自建的Gitlab仓库,即每个开发同学都有Gitlab账号,SonarQube我们就可以使用上Gitlab登录,这样就不需要再维护一套用户体系了. S ...
- 在 Traefik 中使用 Kubernetes Gateway API
文章转载自:https://mp.weixin.qq.com/s/QYy8ETBB-xqU0IMI7YuTWw Gateway API(之前叫 Service API)是由 SIG-NETWORK 社 ...