博客
关于我
Node第一天
阅读量:793 次
发布时间:2023-02-16

本文共 2250 字,大约阅读时间需要 7 分钟。

Node.js模块化规范与全局对象解析

CommonJS模块化规范

在Node.js中,模块化开发是核心特性之一。CommonJS是Node.js模块系统的模块化规范,遵循以下规则:

模块引入

模块间的引入使用require()方法:

const module = require('module-path');

模块暴露

模块的暴露方式有两种:

  • exports暴露:将模块输出结果直接挂载到exports对象上。
  • module.exports暴露:将模块输出结果挂载到module.exports对象上。最终,module.exports会将exports指向的值进行暴露。
  • 模块特点

    每个模块都被一个函数包裹,内部通过exportsmodule.exports暴露接口。模块加载时会执行内部函数。


    全局对象与Node.js环境

    Node.js全局对象

    Node.js提供了一个全局对象global,包含以下属性:

    • console:日志输出工具。
    • setTimeout:设置定时器。
    • setInterval:周期性执行函数。
    • setImmediate:立即执行函数。
    • Buffer:二进制数据缓冲工具。
    • process:Node.js进程管理工具。

    Node.js全局环境

    Node.js的全局环境与浏览器不同:

    • DOM:无。
    • BOM:大部分情况下无。
    • ES:支持ES6+标准。
    • global对象:核心全局变量。

    Node.js事件轮询机制

    事件轮询阶段

    Node.js事件轮询机制分为以下阶段:

  • timers(定时器阶段):执行定时器回调。
  • pending callbacks(待处理回调):处理延迟任务。
  • idle/prepare(空闲阶段):执行I/O完成回调。
  • poll(轮询阶段):轮询回调队列。
  • check(检查阶段):执行setImmediate回调。
  • close callbacks(关闭阶段):执行关闭回调。
  • 事件轮询特点

    • 循环过程:事件轮询不断重复执行各个阶段。
    • 停留阶段:大多数回调在poll阶段执行。
    • 优先级setImmediatecheck阶段优先执行。

    process.nextTick

    process.nextTick可以在任何阶段立即执行回调,适用于高优先级任务。


    包管理与依赖管理

    package.json文件

    package.json是Node.js项目的依赖管理文件,包含以下内容:

  • name:包名。
  • version:版本号。
  • dependencies:生产依赖。
  • devDependencies:开发依赖。
  • scripts:项目脚本。
  • npm命令

    • 安装依赖npm install/npm i xxx
    • 全局安装npm i -g
    • 初始化包描述文件npm init -y
    • 删除依赖npm remove xxx

    配置镜像地址

    为了加快依赖下载速度,可以配置镜像地址:

    npm config set registry http://registry.npm.taobao.org/

    yarn命令

    • 安装依赖yarn add xxx
    • 全局安装yarn global add xxx
    • 生成锁文件yarn install

    常用Node.js核心模块

    Buffer模块

    Buffer是Node.js中处理二进制数据的核心模块,主要方法包括:

    • Buffer.alloc():安全创建Buffer。
    • Buffer.from():创建Buffer。
    • Buffer.allocUnsafe():不安全创建Buffer。

    path模块

    处理文件路径的核心模块:

    const path = require('path');console.log(path.join(__dirname, '../', '文件名')); // 绝对路径

    events模块

    实现自定义事件的核心模块:

    const Emitter = require('events');const myEmitter = new Emitter();myEmitter.on('事件名', function(...args) {  console.log('事件触发');});myEmitter.emit('事件名', 1, 2, 3);

    fs模块

    文件系统核心模块,主要方法包括:

  • 同步写入文件
  • const fs = require('fs');fs.writeSync('/路径', '内容', { flags: 'w', mode: 0o666 });
    1. 异步写入文件
    2. fs.open('/路径', 'w', function(err, fd) {  fs.write(fd, '内容', function(err) {    fs.close(fd, function(err) {      // 关闭文件    });  });});
      1. 流式操作
      2. const fs = require('fs');const ws = fs.createWriteStream('/路径');ws.write('内容');

        总结

        Node.js作为前端开发框架,提供了强大的模块化能力和生态系统。通过理解CommonJS模块化规范、全局对象特性及事件轮询机制,我们可以更高效地开发Node.js应用。同时,合理使用包管理工具(如npm和yarn),优化依赖管理流程,是提升开发效率的重要手段。

    转载地址:http://kojfk.baihongyu.com/

    你可能感兴趣的文章
    Vue踩坑笔记 - 关于vue静态资源引入的问题
    查看>>
    Netty工作笔记0025---SocketChannel API
    查看>>
    Netty工作笔记0027---NIO 网络编程应用--群聊系统2--服务器编写2
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0057---Netty群聊系统服务端
    查看>>
    Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
    查看>>
    Netty工作笔记0063---WebSocket长连接开发2
    查看>>
    Netty工作笔记0070---Protobuf使用案例Codec使用
    查看>>
    Netty工作笔记0077---handler链调用机制实例4
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty工作笔记0085---TCP粘包拆包内容梳理
    查看>>
    Netty常用组件一
    查看>>
    Netty常见组件二
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty心跳检测机制
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架内的宝藏:ByteBuf
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—3.Reactor线程模型三
    查看>>