Node-模块系统的用法
题记
node.js模块系统的用法,以下是具体操作过程和代码
为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。
模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。
一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。
引入模块
创建一个mian.js文件:
var hello = require('./hello');
hello.world();
var hello = require('./hello');
hello.world();
require('./hello') 引入了当前目录下的 hello.js 文件(./ 为当前目录,node.js 默认后缀为 js)。
导入模块
Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。
创建hello.js文件:
exports.world = function() {
console.log('Hello World');
}
exports.world = function() {console.log('Hello World');
}
hello.js 通过 exports 对象把 world 作为模块的访问接口,在 main.js 中通过 require('./hello') 加载这个模块,就可以直接访 问 hello.js 中 exports 对象的成员函数了。
把对象封装到模块中
语法:
module.exports = function() {
// ...
}
创建 hello.js文件:
//hello.js
function Hello() {
var name;
this.setName = function(thyName) {
name = thyName;
};
this.sayHello = function() {
console.log('Hello ' + name);
};
};
module.exports = Hello;
//hello.js
function Hello() { var name; this.setName = function(thyName) { name = thyName; }; this.sayHello = function() { console.log('Hello ' + name); };
};
module.exports = Hello;
创建main.js文件:
//main.js
var Hello = require('./hello');
hello = new Hello();
hello.setName('BYVoid');
hello.sayHello();
//main.js
var Hello = require('./hello');
hello = new Hello();
hello.setName('BYVoid');
hello.sayHello();
模块接口的变化是使用 module.exports = Hello 代替了exports.world = function(){}。 在外部引用该模块时,接口对象就是要输出的 Hello 对象本身,而不是原先的 exports。
exports 和 module.exports 的用法
要对外暴露属性或方法,就用 exports 就行,要暴露对象(类似class,包含了很多属性和方法),就用 module.exports。
require 方法中的文件查找策略
从文件模块缓存中加载
尽管原生模块与文件模块的优先级不同,但是都会优先从文件模块的缓存中加载已经存在的模块。
从原生模块加载
原生模块的优先级仅次于文件模块缓存的优先级。require 方法在解析文件名之后,优先检查模块是否在原生模块列表中。以http模块为例,尽管在目录下存在一个 http/http.js/http.node/http.json 文件,require("http") 都不会从这些文件中加载,而是从原生模块中加载。
原生模块也有一个缓存区,同样也是优先从缓存区加载。如果缓存区没有被加载过,则调用原生模块的加载方式进行加载和执行。
从文件加载
当文件模块缓存中不存在,而且不是原生模块的时候,Node.js 会解析 require 方法传入的参数,并从文件系统中加载实际的文件,加载过程中包含包装和编译。
require方法接受以下几种参数的传递:
http、fs、path等,原生模块。
./mod或../mod,相对路径的文件模块。
/pathtomodule/mod,绝对路径的文件模块。
mod,非原生模块的文件模块。
后记
觉得有用可以点赞或收藏!
相关文章:
Node-模块系统的用法
题记 node.js模块系统的用法,以下是具体操作过程和代码 为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。 模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。 一个 Node.js 文件就是一个模块,这…...
XSS攻击(1), 测试XSS漏洞, 获取cookie
XSS漏洞, 测试XSS漏洞, 获取cookie 一, 概念: XSS(Cross-Site Scripting), 跨站攻击脚本, XSS漏洞发生在前端, 依赖于浏览器的解析引擎, 让前端执行攻击代码. XSS其实也算注入类的攻击, XSS代码注入需要有JavaScript编程基础. 二, 目的: XSS(跨站脚本࿰…...
linux任务优先级
这篇笔记记录了linux任务(指线程而非进程)优先级相关的概念,以及用户态可以用来操作这些优先级的系统调用。 基本概念 调度策略 linux内核中的调度器为任务定义了调度策略,也叫调度类,每个任务同一时刻都有唯一的调…...
JVM内存模型概述
这里主要分为五大块,分别是:本地方法栈、方法区、java堆、程序计数器和java栈。其中重点是方法区、java堆和java栈。 下面就把各个区域的性质总结一下:(说明,下面的只是结论,没有详细的对各个内存块进行详细…...
【JavaEE】CAS -- 多线程篇(7)
CAS 1. 什么是 CAS2. CAS 伪代码3. CAS 是怎么实现的4. CAS的应用4.1 实现原子类4.2 实现自旋锁 5. CAS 的 ABA 问题 1. 什么是 CAS CAS: 全称Compare and swap,字面意思:”比较并交换“能够比较和交换 某个寄存器中的值和内存中的值, 看是否相等, 如果相等, 则把另…...
18-spring 事务
文章目录 1. xml和注解配置方式的对象2.spring事务传播特性3. 注解事务的初始化流程4. 创建事务信息流程图5. 事务回滚流程图 1. xml和注解配置方式的对象 2.spring事务传播特性 事务传播行为类型说明PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务…...
Qt窗体设计的布局
本文介绍Qt窗体的布局。 Qt窗体的布局分为手动布局和自动布局,手动布局即靠手工排布各控件的位置。而自动布局则是根据选择的布局类型自动按此类型排布各控件的位置,使用起来比较方便,本文主要介绍Qt的自动布局。 1.垂直布局 垂直布局就是…...
分布式锁 - 理论篇
一、为什么需要分布式锁 二、分布式锁实现 1.分布式锁演进 - 基本原理 我们可以同时去一个地方“占坑”,如果占到,就执行逻辑。否则就必须等待,直到释放锁。“占坑”可以去redis,可以去数据库,可以去任何大家都能访…...
复杂的菱形继承及菱形虚拟继承(详解)
复杂的菱形继承及菱形虚拟继承 复杂的菱形继承及菱形虚拟继承虚拟继承解决数据冗余和二义性的原理笔试面试题 复杂的菱形继承及菱形虚拟继承 单继承:一个子类只有一个直接父类时称这个继承关系为单继承 多继承:一个子类有两个或以上直接父类时称这个继…...
【快捷测试模型是否可以跑通】设置一张图片的张量形式,送入自己写的模型进行测试
文章目录 1. 1. import torch.nn as nn import torch from einops import rearrange, repeat from einops.layers.torch import Rearrange import torch.nn.functional as Fclass PreNorm(nn.Module):def __init__(self, dim, fn):super().__init__()self.norm nn.LayerNorm(…...
软考系列(系统架构师)- 2019年系统架构师软考案例分析考点
试题一 软件架构(架构风格、质量属性) 【问题1】(13分) 针对用户级别与折扣规则管理功能的架构设计问题,李工建议采用面向对象的架构风格,而王工则建议采用基于规则的架构风格。请指出该系统更适合采用哪种…...
安防视频监控系统EasyCVR视频汇聚存储平台定制化开发:新增kafka配置
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台可拓展性强、…...
C++设计模式_08_Factory Method工厂方法模式
文章目录 1. “对象创建模式”模式1.1 典型模式 2. 动机(Motivation)3. 代码演示Factory Method工厂方法模式3.1 常规方法3.2 面向接口的编程3.2.1 FileSplitter1.cpp3.2.2 MainForm1.cpp 3.3 Factory Method工厂方法3.3.1 ISplitterFactory.cpp3.3.2 Ma…...
【TensorFlow1.X】系列学习笔记【基础一】
【TensorFlow1.X】系列学习笔记【基础一】 大量经典论文的算法均采用 TF 1.x 实现, 为了阅读方便, 同时加深对实现细节的理解, 需要 TF 1.x 的知识 文章目录 【TensorFlow1.X】系列学习笔记【基础一】前言线性回归非线性回归逻辑回归总结 前言 本篇博主将用最简洁的代码由浅入…...
Linux 基础操作手记三(内存篇)
Linux 基础操作手记三 释放内存虚拟机彻底无网络测试网速设置虚拟内存交换空间未使用虚拟机设置虚拟内存无法开机问题GParted - 分配内存系统盘扩容自己 释放内存 sync && echo 3 > /proc/sys/vm/drop_caches 虚拟机彻底无网络 还原默认设置,静静的等待…...
NodeJS的初使用,以及引入第三方插件和安装淘宝镜像的教程
NodeJs 命令 npm init -y 生成package.json文件npm i jquery --save–dev 开发依赖(jQuery后面还可以跟模块,可以有多个)npm i jquery --save 生产依赖npm i jquery --D 开发依赖npm uninstall jquery 卸载删除npm i 把删掉的模块,全部重新加载回来 1.介绍 1.什么是NodeJs?…...
Java读取文件的N种方法
1.概述 在这篇文章里, 我们将探索不同的方式从文件中读取数据。 首先, 学习通过标准的的Java类,从classpath、URL或者Jar中加载文件。 然后,学习通用BufferedReader, Scanner, StreamTokenizer, DataInputStream, SequenceInput…...
子类的构造与析构过程
一、简介 父类,也称基类,其构造方法和析构方法不能被继承; 子类,也称派生类,继承父类的方法和属性,但要加入新的构造和析构函数。 二、构造与析构过程 构造:先调用父类——>再调用子类 析构&…...
位运算相关笔记
位运算 Part 1:基础 左移:左移一位,相当于某数乘以 2 2 2。左移 x x x位,相当于该数乘以 2 x 2^x 2x。 右移:右移一位,相当于某数除以 2 2 2。右移 x x x位,相当于该数除以 2 x 2^x 2x。 与运算&…...
uniapp 安装 u-view 组件库
u-view 组件库安装教程:https://uviewui.com/components/install.html 注:以下使用 HBuilderx 安装 u-view 2.0 版本,不适用于其它版本。 1.安装 u-view 组件库 2、注册并登录 HBuilderx 账号,点击下载 u-view 组件库。 3、点击…...
兔抗PHLPPL抗体亲和纯化,IP/WB双平台验证,精准检测Akt调控因子
一、产品概述由艾美捷Bethyl Laboratories推出的兔抗PHLPPL抗体亲和纯化抗体,货号:A300-661A是一款以兔为宿主来源、针对人PHLPPL蛋白的多克隆抗体。该抗体采用抗原亲和纯化工艺制备,以完整IgG形式提供,浓度为200 g/ml,…...
Resemble Enhance:AI语音增强技术如何重塑音频质量新标准
Resemble Enhance:AI语音增强技术如何重塑音频质量新标准 【免费下载链接】resemble-enhance AI powered speech denoising and enhancement 项目地址: https://gitcode.com/gh_mirrors/re/resemble-enhance 在数字音频处理领域,噪声干扰和音质退…...
从一次内部安全测试复盘讲起:我们是如何在3天内修复了20+个‘访问控制损坏’漏洞的
从内部安全测试到系统加固:3天修复20访问控制漏洞的实战记录 那天下午,当渗透测试报告出现在团队Slack频道时,整个技术部陷入了短暂的沉默。报告首页用红色标注的"Critical"字样格外刺眼——我们的核心业务系统在模拟攻击中暴露出2…...
猫抓浏览器插件:三步快速搞定网页视频音频下载的完整指南
猫抓浏览器插件:三步快速搞定网页视频音频下载的完整指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到在线视频无法保…...
从“翻车”到“神图”:我的Stable Diffusion提示词避坑与调优笔记(附Lora使用心得)
从“翻车”到“神图”:我的Stable Diffusion提示词避坑与调优笔记 深夜三点,屏幕上的AI少女长着七根手指,背景里漂浮着半截手臂——这已经是我今晚第十七张“恐怖片剧照”了。作为从MidJourney转战Stable Diffusion的老玩家,我经历…...
从GESP三级C++考题到实战:手把手教你写一个密码强度检测器(附完整代码)
从GESP考题到工业级工具:用C构建智能密码强度检测系统 密码安全是数字世界的基石。想象一下,当你注册一个新服务时,系统如何判断你输入的密码是否足够强壮?这背后往往藏着一个精巧的密码检测逻辑。今天,我们就从GESP三…...
读者 30+ 问合集:从“多 Agent 调度不准“到 AI 团队协作避坑指南
上篇文章评论区积攒了几十个问题,挑了最高频的几类,一篇讲完。从概念混淆、环境配置、到多角色协作、国内模型接入,系统梳理。 一、最容易混的三个概念(搞清楚这个,80% 的问题就消解了) 很多朋友把下面三件…...
Python开发岗转Agent开发岗学习路线
Python开发岗转Agent开发岗学习路线 前言 从Python开发岗转型到AI Agent开发岗是顺应2026年技术趋势的明智选择。您的Python基础和后端工程经验是宝贵的财富,转型并非从零开始,而是能力的升级和拓展。 转型学习路线图 阶段一:基础认知与核心框…...
STM32用GPIO模拟I2C驱动AT24C16,实测代码避坑与页写优化
STM32 GPIO模拟I2C驱动AT24C16:页写优化与实战避坑指南 在嵌入式开发中,外部存储器的使用频率极高,而AT24C16作为经典的EEPROM芯片,因其稳定性与易用性广受欢迎。但当项目对写入速度有较高要求时,传统的单字节写入方式…...
用STM32的3个GPIO口扩展8路ADC输入?试试74HC4051模拟开关的实战配置
用STM32的3个GPIO口扩展8路ADC输入?74HC4051模拟开关实战指南 在嵌入式开发中,ADC通道不足是个常见痛点。想象一下这样的场景:你的STM32项目需要同时采集8路温度传感器数据,但手头的MCU只有1-2个ADC通道。直接换芯片成本高&#…...
