Node.js模块系统

Node.js的模块系统是将可重用代码封装在各种模块中,减少了应用程序的代码量,模块系统提高了开发效率和代码的可读性,并且模块打包代码的方式不会改变全局作用域,开发人员可以在被载入的模块文件中选择要对外暴露的方法和变量,并且模块可以发布到npm仓库中与他人共享。

Node.js主要用于服务器端编程,无须考虑非同步加载的方式,选择CommonJS规范,按照CommonJS规范要求,模块必须通过module.exports对象导出对外暴露的变量或接口,通过require()方法将其他模块的输出加载到当前模块作用域中。

在Node.js模块系统中,独立的模块有自己的作用域,其变量、方法等都是对其他文件不可见的。

典型的模块可以是一个包含exports对象属性定义的文件,可将exports看作是module.exports的简单引用形式。通过在exports对象上指定额外的属性,可以将方法和对象等添加到模块的根部。例如,创建一个名为hello.js的文件,添加代码来定义模块。

用module.export和exports导出模块的区别是

  • 使用 exports 导出的方法返回的是模块函数,可以直接调用
  • module.exports 导出的方法返回的是一个类,需要new实例化为对象之后才可以调用

模块的工作机制

Node.js核心模块

os模块

os模块 包含了操作系统的详细信息

const os = require('os');// 导入os模块
console.log('操作系统类型:' + os.type());
console.log('操作系统平台: ' + os.platform());
console.log('系统内存总量:' + os.totalmem() + " 字节");
console.log('空闲内存量:' + os.freemem() + " 字节");
console.log('CPU信息:');
console.log( os.cpus());
操作系统类型:Windows_NT
操作系统平台: win32
系统内存总量:16505966592 字节
空闲内存量:9022722048 字节
CPU信息:
[ { model: 'AMD Ryzen 7 4800H with Radeon Graphics         ',speed: 2895,times:{ user: 139234, nice: 0, sys: 222921, idle: 3787859, irq: 85359 } },

util模块

util模块 提供的大部分实用工具可用于应用程序与模块开发

const util = require('util');
console.log(util.inspect(util, { showHidden: true, depth: null }));
util.format('%s:%s', '蓝天白云'); // 返回: 蓝天白云:%s
util.format('%s:%s', '环境优美', '绿水青山', '蓝天白云'); // 返回:环境优美:绿水青山 蓝天白云
util.format(1, 2, 3); // 返回:'1 2 3'

path模块

path模块用于处理解决文件与目录的路径

path相关属性

path.delimiter:提供平台特定的路径分隔符,Windows上是“;”,POSIX上是“:”。
path.sep:提供平台特定的路径分段分隔符。Windows上是“\”,POSIX上是“/”。

path相关方法

path.normalize(path):对路径进行规范化,并解析“..”和“.” 。
path.dirname(path):返回路径的目录名,类似于UNIX中的dirname命令。
path.basename(path[, ext]):返回路径中的最后一部分,可选的ext参数表示文件扩展名。
path.extname(path):返回路径中文件的后缀名,即路径中最后一个“.”之后的部分。
path.parse(path):返回完整路径的一个对象。
path.format(pathObject):从一个对象表示的路径返回一个字符串表示的路径。
path.resolve([...paths]):将一个路径或路径片段的序列解析为一个绝对路径。
path.relative(from, to):返回从参数from到to的相对路径(基于当前工作目录)。
path.join([...paths]):使用平台特定的分隔符将路径片段序列连接到一起,并规范生成的路径。
path.isAbsolute(path):判定路径是否为一个绝对路径。

url模块

url模块 提供了一些实用方法,用于URL处理与解析

url模块的两套API
1.Node.js特有的API(传统的URL API)主要用于兼容已有应用程序。

const url = require('url');
const myURL = url.parse('https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash')


url地址中的符号:

  • ?:是请求地址与请求参数之间的分隔符
  • &:参数之间的分隔符

2.新的应用程序应使用WHATWG API

const { URL } = require('url');
const myURL = new URL('https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash');


相关属性和方法

querystring模块

querystring模块 主要对URL字符串进行处理和解析

parse方法 将URL查询字符串解析成键值对集合

const {URL,URlSearchParams} = require('url')
const queryString = require('querystring')
const myUrl = new URL('http://localhost:8080/index.html?username=张三&&password=123456')
const str = queryString.parse(myUrl.search.substring(1,myUrl.search.length-1))//parse把字符串转换成键值对
console.log(str)

stringify方法 将对象(键值对)转换成URL的查询字符串 实际就是parse方法的逆操作

const queryString = require('querystring')
var obj = {foo:'bar',abc:['xyz','123']
}
var str = queryString.stringify(obj) // stringify把键值对转换成字符串
console.log(str)

npm包管理器

npm(Node Package Manager)包管理器,npm是整个Node.js社区最流行、支持第三方模块最多的包管理器,npm用来安装、共享和发布代码以及管理项目中的依赖,可以进入npm官网了解更多

npm常用命令

安装本地包 npm install 包名
确定npm安装包的版本 npm install 包名@版本号
升级npm npm install npm -g
-g是安装参数 表示全局安装

查看安装信息
npm list 查看当前目录下已安装的包
npm list -g 查看全局安装

清空npm的本地缓存 npm cache clean

包的更新

npm update 包名 升级当前目录下指定的包
npm update -g 包名 升级全局的包

包的卸载
npm uninstall 包名 卸载dependencies节点下的包 (生产环境)
npm uninstall 包名 --save-dev 卸载devDependencies节点下的包
(开发与测试环境)
npm uninstall -g 包名 卸载全局的包

package.json文件的功能

  • 列出当前项目所依赖的包。
  • 通过语义化版本控制规则指定当前项目所使用的包的版本。
  • 实现可重用的构建,更易于与其他开发人员分享包。

Node.js 模块以及npm包的管理和使用相关推荐

  1. 怎么样写一个 node.js模块以及NPM Package

    你来到了写一个mode.js模块的舞台中央,不管你是因为自己需要写一个你自己的nodejs模块,还是你仅仅是处于好奇.无论是什么原因,在这个教程里,我将给你演示怎样创建一个nodejs模块. node ...

  2. 了解node.js模块化和npm包

    模块化-理解模块化 根目录 ├── index.html # 主页的页面 ├── index.js # 主页需要用到的js代码 │ └── getData() # 是index.js中定义的函数 └─ ...

  3. [Node.js] mySQL数据库 -- NPM包

    CommonJS 1.导入模块用require 类比于script src= 2.暴露出去(导出) exports (function(window){ let jQuery-{}; window. ...

  4. node mocha_如何使用Mocha和Assert测试Node.js模块

    node mocha The author selected the Open Internet/Free Speech Fund to receive a donation as part of t ...

  5. Node.js「一」—— Node.js 简介 / Node.js 模块 / 包 与 NPM

    本文为 Node.js 系列笔记第一篇.文章参考:nodejs 教程 -- 大地:<深入浅出 Node.js>:阮一峰 nodejs 博客 文章目录 一.Node 简介 1. 简单介绍 2 ...

  6. node.js模块和包

    概念:模块(Module)和包(Package)是Node.js最重要的支柱.开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分.分装.然后组合起来.模块正式为了实现这种方式而诞生, ...

  7. 编写原生的Node.js模块

    通常,我们开发原生Node.js模块包括但不仅限于以下原因: 对性能有比较苛刻要求的应用.尽管Node.js得益于libuv,在异步I/O操作很有优势,但遇到数字计算时并不是一个很好的选择. 使用更加 ...

  8. node 大写_大写Node.js模块

    node 大写 Today, let's see a third party module that helps us in working with upper-case letters witho ...

  9. Node.js 模块之Nimble流程控制

    NodeJS异步的特性有时候会导致程序非常的难看,回调一层套着一层,这个时候就要用流程控制模块来控制究竟是同步还是异步了. Nimble是一个轻量.可移植的函数式流程控制模块.经过最小化和压缩后只有8 ...

最新文章

  1. 巧用CSS的Wave滤镜
  2. linux0.11内核编译,编译Linux-0.11内核
  3. 实战SSM_O2O商铺_16【商铺注册】前后端联调验证整体模块功能
  4. 据说是Jack Wu的自定义函数!烂
  5. doorway path issue of my task in HCP
  6. substring not found什么意思_英文写作中,除了not,你还会其他否定表达吗?
  7. 《MySQL——查询长时间不返回的三种原因与查询慢的原因》
  8. 63 javabean的作用域范围
  9. vuerouter传参方式_VUE Router学习原理(一)
  10. JSP指示元素%@ % 与指示类型
  11. java.lang.classcastexception怎么解决_java.lang.LinkageError:ClassCastException
  12. 蓝桥杯 BEGIN-2 入门训练 序列求和
  13. v-for列表渲染之数组变动检测
  14. 【实用sci论文常用词语】
  15. 蓝桥杯web:2.【Bug 调试】修复注册验证问题
  16. 语言-汉语-官话-中原官话-兖菏片:兖菏片
  17. 信号完整性和电源完整性基本介绍
  18. 小鸡小猪大历险java_小鸡和小猪
  19. html操作sqlite,JavaScript操作sqlite
  20. 自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别

热门文章

  1. 5G能让你的网盘提速吗?
  2. 新建jsp文件没有index.html,Eclipse------新建文件时没有JSP File解决方法
  3. 苹果店大欺客 直至今日才承认iPhoto应用使用OSM
  4. Android 待机时间
  5. 什么是跨域以及为什么会出现跨域以及跨域的解决方案
  6. js-入门(99乘法表)
  7. input元素required属性无效
  8. 数字孪生 武器装备可视化分析决策系统
  9. 读养生四要有感《却疾篇》
  10. 网站关键词布局定位分析,如何准确定位我们需要的网站关键词?