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; ...
随机推荐
- ArkUI block 标签
block 标签在构建时不会被当作真实 DOM,而 block 标签之下的标签都会被渲染到真实 DOM 中.它类似于 Vue 的 template 标签. <div class="co ...
- UI自动化框架搭建之Python3
UI自动化框架搭建--unittest 使用的代码是Python3版本,与时俱进哈哈 解释一下我的框架目录接口(每个人框架的目录接口不一样,根据实际要求) common目录:公共模块,这个地方可以存放 ...
- 万物皆可集成系列:低代码释放用友U8+深度价值(2)—数据拓展应用
在上一篇内容我们介绍了如何利用低代码开发套件实现低代码应用与U8+系统的对接集成,本次给大家带来的是如何将用友U8+系统中的数据进行价值扩展和实际应用. 我们以生产物料齐套分析为例来说明如何利用低代码 ...
- Python代码用在这些地方,其实1行就够了!
摘要:都说 Python 简单快捷,那本篇博客就为大家带来一些实用的 Python 技巧,而且仅需要 1 行代码,就可以解决一些小问题. 本文分享自华为云社区<你猜 1 行Python代码能干什 ...
- 第三十九篇:Vue3 watch(ref和reactive的监视)
好家伙, 1.vue2中的watch是调用配置项,(只能写一个) vue3中的watch是一个函数(可以写很多个) 2.watch一些用法: 这里是定义的数据 set up(){ let sum =r ...
- PostgreSQL 绑定变量窥探
今天我们要探讨的是 custom执行计划和通用执行计划.这一技术在 Oracle中被称为绑定变量窥视.但 Kingbase中并没有这样的定义,更严格地说,Kingbase叫做custom执行计划和通用 ...
- 后缀自动机(SAM)+广义后缀自动机(GSA)
经过一顿操作之后竟然疑似没退役0 0 你是XCPC选手吗?我觉得我是! 稍微补一点之前丢给队友的知识吧,除了数论以外都可以看看,为Dhaka和新队伍做点准备... 不错的零基础教程见 IO WIKI ...
- Linux安装Minio
Linux安装Minio 一.安装包方式安装 1.下载minio 1.1 手动下载:https://docs.min.io/docs/minio-quickstart-guide.html 访问上 ...
- 2020年12月-第01阶段-前端基础-HTML CSS 项目阶段(一)
品优购项目(一) 目标: 能会引入ico图标 能简单看懂网站优化的三大标签 能使用字体图标 ( 重点 ) 能说出我们css属性书写顺序 1. 品优购项目介绍 项目名称:品优购 项目描述:品优购是一个电 ...
- JAVA SE 基础总结
§ 基础知识 一.程序组织与运行原理 1.1 程序组织 一个 JAVA 程序文件中主要由如下几部分构成: package 声明 public 类:public 类与类文件名相同,因为其是作为该类文件唯 ...