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常用组件收集

收集了一些平时遇到的前端比较优秀的组件,方便以后开发的时候查找!!! 函数工具: 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) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

Node Linux相关安装

下载经编译好的文件cd /optwget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.gztar -xvf node-v10.15.3-linux-x64.tar.gzln -s /opt/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/ln -s /opt/nod

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

js异步提交form表单的解决方案

1.定义异步提交表单的方法 (通用方法) /*** 异步提交form表单* @param options {form:form表单元素,success:执行成功后处理函数}* <span style="color:#ff0000;"><strong>@注意 后台接收参数要解码否则中文会导致乱码 如:URLDecoder.decode(param,"UTF-8")</strong></span>