Node.js_基础知识(CommonJS模块化)

2024-03-03 06:44

本文主要是介绍Node.js_基础知识(CommonJS模块化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CommonJS模块化规范

  1. 加载时机:
    • 服务器端: 模块的加载是运行时同步加载的,node.js实现了模块化规范
    • 浏览器端: 模块需要提前编译打包处理,需使用Browserify编译打包,推荐使用ESM
  2. 暴露模块:module.exports、exports
  3. 导入模块:require

模块导出

  1. module.exports = 任意数据 (字符串、整数、布尔值、对象)
  2. exports.模块名 = 任意数据 (字符串、整数、布尔值、对象),相当于exports={模块名: 任意数据}
  3. module.exports 与 exports 的关系:
    • 在模块内部存在一种隐式关系:exports = module.exports = {}
    • 模块最终取的是module.exports的值
    • exports只能是引用类型数据,不能使用exports = 基本类型的数据。如果 exports = ‘abc’,不会改变模块返回的结果,因为module.exports为{},所以模块返回的是{}

模块导入

  1. 使用require方法导入文件:

    • 自定义的模块:路径建议写相对路径 const m = require('./m.js');,并且不能省略./../
    • 内置的模块:直接require('模块名'),无需加./../
  2. 文件类型处理

    • jsjson类型的文件不用写后缀
    • 其他类型的文件不写后缀就会按js类型处理
  3. require导入自定义模块的基本流程:

    • 将相对路径转为绝对路径,定位目标文件
    • 缓存检测
    • 读取目标文件代码
    • 包裹为一个函数并执行(自执行函数),通过arguments.callee.toString()查看自执行函数
    • 缓存模块的值
    • 返回module.exports的值
    const path = require('path');
    const fs = require('fs');
    let caches = [];
    function require(file) {// 将相对路径转为绝对路径,定位目标文件let absolutePath = path.resolve(__dirname, file);// 缓存检测if(caches[absolutePath]) {return caches[absolutePath];}// 读取目标文件代码let code = fs.readFileSync(absolutePath).toString();// 包裹为一个函数并执行(自执行函数)let module = {};let exports = module.exports = {};(function(exports, require, module, __filename, __dirname){// eval(code)})(exports, require, module, __filename, __dirname)// 缓存模块的值caches[absolutePath] = module.exports;// 返回module.exports的值return module.exports;
    }
    // 测试
    const m = require('./m.js');// m.js文件
    const mt = {name: '模块1'
    };
    module.exports = mt;
    
  4. 导入路径是文件夹的处理流程:

    • 先检查该文件夹下package.json文件的main属性对应的文件,如果main属性或package.json文件不存在,则会检查文件夹下的index.jsindex.json文件,如果还是找不到就会报错
    Created with Raphaël 2.3.0 require('../文件夹') 检查文件夹下的package.json文件 存在? 检查main属性 存在? 导入成功 检查文件夹下的index.js或index.json文件 存在? 导入失败 yes no yes no yes no

这篇关于Node.js_基础知识(CommonJS模块化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/768805

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

JS常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: Lodash 页面固定: stickUp、jQuery.Pin 轮播: unslider、swiper 开关: switch 复选框: icheck 气泡: grumble 隐藏元素: Headroom

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏