Nodejs下动态加载文件夹下的文件模块

个人博客

Nodejs下动态加载文件夹下的文件模块

个人博客,求关注,如果有不够清晰的,麻烦指出来,如果有很不正确的,多谢批评。

文章概叙

本文应用的场景是读取指定文件夹下面的所有文件,然后做操作,用到的方法是fs模块的readdir,以及require作为加载文件的例子

应用场景

讲一个大概的例子,比如现在一个系统,作用是对输入的数据做处理,根据不同的来源,做不同的处理,但是现在的逻辑只有两种处理方式,我们可以直接用一个简单的if-else或者Map做处理。但考虑到项目的扩展性,我们决定使用模块化的处理方式,即将不同的处理分装为一个js文件,接着匹配不同的行为准则,而这样做的好处就是其他人不需要再去改入口文件的代码,只需要插入新的模块就可以了,其实这也就是很标准的一种模块化思想。

数据准备

首先,先看下文件的架构,index.js是入口文件,而a.js以及b.js则是模块文件。a.js以及b.js都只是打印出一句话而已。
在这里插入图片描述

在这里插入图片描述

代码实现

实现过程不复杂,大概地讲解下,做一个简单的demo,大家就会明白如何处理了​。
第一步,先用fs.readdir获取到指定文件夹下的所有文件名字。

const fs = require("fs");const currentDirPath=__dirname;
​
fs.readdir(currentDirPath, (err, files) => {
    if (!err) {
        console.log(files);
    }
})

readdir的参数主要有两个,一个是文件夹的路径,这儿我用当前的文件夹的路径,也就是代码中的currentDirPath。
第二个参数是回调参数,也就是我们的callback function,其中callback的第一个参数是boolean类型的err,也就是否报错,第二个参数则是文件名称的列表。
当前的打印如下
在这里插入图片描述

第二步,我们需要排除现在所属的index.js文件,当然不会那么low bee到去写一个值为’index.js’的常量,我们可以用__filename来获取当前文件的路径。
首先,看下打印出来__filename的值是什么
在这里插入图片描述

因此,我们还需要将前面的文件的路径以及最后的""去掉,只留下最后的文件名字,让下面的文件列表做循环的时候,能完美的匹配到我们当前文件的名字,最后的代码如下。

const fs = require("fs");const currentDirPath = __dirname;
const currentFilePath = __filename
// 获取当前文件的名字,包含扩展名。
const currentFileName = currentFilePath
    .replace(currentDirPath, '')
    .substring(1);// 获取指定文件夹下面的所有文件
fs.readdir(currentDirPath, (err, files) => {
    if (!err) {
        // 遍历文件
        for (let index = 0; index < files.length; index++) {
            const element = files[index];
            // 如果当前入口文件
            if (element !== currentFileName) {
                console.log(element);}}
    }
})

打印效果如下

在这里插入图片描述

第三步是最重要的加载模块,使用ts的朋友都知道我们加载文件的时候用的是import。而不是require。但是很遗憾,我这儿还是需要用require来加载(新博客会讲解下如何按需、动态加载)。原因也很简单,使用require是最简单的,这样子别人很容易就能接受,但是我也会大概的写下如何用import加载。

const fs = require("fs");const currentDirPath = __dirname;
const currentFilePath = __filename
// 获取当前文件的名字,包含扩展名。
const currentFileName = currentFilePath
    .replace(currentDirPath, '')
    .substring(1);// 获取指定文件夹下面的所有文件
fs.readdir(currentDirPath, async (err, files) => {
    if (!err) {
        // 遍历文件
        for (let index = 0; index < files.length; index++) {
            const element = files[index];
            // 如果当前入口文件
            if (element !== currentFileName) {
                console.log(element);
                // require 加载
                require(`./${element}`);// import 动态加载, 需要注意使用await的作用。
                //  await import(`./${element}`);}}
    }
})

大体就是这样,自己敲一遍,你会发现没什么,因为真的没什么难度。只要熟悉各类的api都没啥问题,顶多是吃在了不熟悉api的亏上。但也并非百试百灵,比如在用mocha做单元测试的时候,我就不建议使用这种方式。因为超纲,我就不写怎么在mocha里面使用了

注意点

应该有朋友注意到,我专门使用了for…而不是使用最简单的forEach。结合到后面的await,我想大家也能猜到是因为async/await在for中才能起作用的原因。​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/64561.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

24届近5年同济大学自动化考研院校分析

今天给大家带来的是同济大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、同济大学 学校简介 同济大学历史悠久、声誉卓著&#xff0c;是中国最早的国立大学之一&#xff0c;是教育部直属并与上海市共建的全国重点大学。经过115年的发展&#xff0c;同济大学已经…

Splunk Enterprise for mac(可视化数据分析软件)详细安装教程

Splunk Enterprise for Mac是一款可视化数据分析软件&#xff0c;为你提供强大的搜索、 分析和可视化功能&#xff0c;可以帮助您获得有价值的业务情报&#xff0c;从你机器生成的数据。还在等什么&#xff1f;有需要的朋友&#xff0c;欢迎前来下载&#xff01; 实时监测和搜…

hive编译报错整理

背景 最近在修hive-1.2.0的一个bug&#xff0c;需要修改后重新打包部署到集群&#xff0c;打包的时候报下面的错误&#xff0c;原因很简单&#xff0c;从远程仓库里面已经拉不到这个包了。 org.pentaho:pentaho-aggdesigner-algorithm:jar:5.1.5-jhyde was not found in http…

UE5+Paperzd问题

TopDown的2D游戏&#xff0c;遇到两个问题&#xff0c;第一问题是游戏一开始就会从tilemap上掉下去。第二个问题是没法和图层2上的物体做碰撞。 一、碰撞问题 1、创建的TileSet后&#xff0c;左侧选中一个tile后&#xff0c;一定要点击上边的Add Box&#xff0c;否则创建出来的…

Fabric

Fabric Fabric.js是一个非常好用的Javascript HTML5 canvas库&#xff0c;封装了canvas原生较为复杂的api&#xff0c;在canvas元素的顶部提供交互式对象模型&#xff0c;用于实现图片的变形旋转拖拉拽等功能。 在线demo: 官网链接 下载 npm install fabric --save或 yarn …

工具推荐之不出网环境下上线CS

前言 在实战攻防演练中&#xff0c;我们经常会遇到目标不出网的情况&#xff0c;即便获取了目标权限也不方便在目标网络进行下一步横向移动。本期我们将会推荐两个常用的代理工具&#xff0c;使我们能在不出网的环境下让目标上线到CS&#xff0c;方便后渗透的工作。 工具1&…

吃瓜教程-Task05

目录 支持向量机 间隔与支持向量 SVM基本型 对偶问题 kkt条件 例子 对偶问题 例子 对偶问题原理解释 软间隔与正则化 替代损失函数 支持向量回归 例子 支持向量机 间隔与支持向量 在样本空间中&#xff0c;划分超平面可通过如下线性方程来描述: 样本空间中任意点x到…

opencv基础-33 图像平滑处理-中值滤波cv2.medianBlur()

中值滤波是一种常见的图像处理滤波技术&#xff0c;用于去除图像中的噪声。它的原理是用一个滑动窗口&#xff08;也称为卷积核&#xff09;在图像上移动&#xff0c;对窗口中的像素值进行排序&#xff0c;然后用窗口中像素值的中值来替换中心像素的值。这样&#xff0c;中值滤…

分布式测试插件 pytest-xdist 使用详解

目录 使用背景&#xff1a; 使用前提&#xff1a; 使用快速入门&#xff1a; 使用小结&#xff1a; 使用背景&#xff1a; 大型测试套件&#xff1a;当你的测试套件非常庞大&#xff0c;包含了大量的测试用例时&#xff0c;pytest-xdist可以通过并行执行来加速整体的测试过…

Linux tcpdump 命令详解

简介 用简单的话来定义tcpdump&#xff0c;就是&#xff1a;dump the traffic on a network&#xff0c;根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的…

时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测

时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-GRU贝叶斯优化门控循环单元时间序列预测。基于贝叶斯(bayes)…

One-4-All: Neural Potential Fields for Embodied Navigation 论文阅读

论文信息 题目&#xff1a;One-4-All: Neural Potential Fields for Embodied Navigation 作者&#xff1a;Sacha Morin, Miguel Saavedra-Ruiz 来源&#xff1a;arXiv 时间&#xff1a;2023 Abstract 现实世界的导航可能需要使用高维 RGB 图像进行长视野规划&#xff0c;这…

【Windbg】通过网络调试windows内核

环境 windows版本&#xff1a;win10_x64 1901 windbg版本&#xff1a;1.2306.12001.0 HOST 1、windbg软件设置。 点击菜单文件&#xff0c;然后如下图操作。 2、等待连接。 ************* Waiting for Debugger Extensions Gallery to Initialize **************>>&…

“他“是怎么拿offer的?全网最全,性能测试面试题+答案(超全整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、什么是负载测试…

BenchmarkSQL 支持 TiDB 驱动以及 tidb-loadbalance

作者&#xff1a; GangShen 原文来源&#xff1a; https://tidb.net/blog/3c274180 使用 BenchmarkSQL 对 TiDB 进行 TPC-C 测试 众所周知 TiDB 是一个兼容 MySQL 协议的分布式关系型数据库&#xff0c;用户可以使用 MySQL 的驱动以及连接方式连接 TiDB 进行使用&#xff0…

了解HTTP代理日志:解读请求流量和响应信息

嗨&#xff0c;爬虫程序员们&#xff01;你们是否在了解爬虫发送的请求流量和接收的响应信息上有过困扰&#xff1f;今天&#xff0c;我们一起来了解一下。 首先&#xff0c;我们需要理解HTTP代理日志的基本结构和内容。HTTP代理日志是对爬虫发送的请求和接收的响应进行记录的文…

基于STM32微控制器的物联网(IoT)节点设计与实现

基于STM32微控制器的物联网(IoT)节点的设计和实现。我们讨论物联网节点的基本概念和功能,并详细介绍了STM32微控制器的特点和优势。然后,我们将探讨如何使用STM32开发环境和相关的硬件模块来设计和实现一个完整的物联网节点。最后,我们将提供一个示例代码,展示如何在STM3…

QToolButton内存提前释放导致mouseReleaseEvent崩溃问题

QToolButton内存提前释放导致mouseReleaseEvent崩溃问题 1、问题现象及原因分析 1.1、问题现象 如图所示&#xff0c;mouseReleaseEvent接口this指针地址为空&#xff0c;导致了Qt内部发生了Access violation异常。 1.2、问题原因 在项目中&#xff0c;使用该QToolButton…

图扑软件入选 2023 中国信通院“铸基计划”全景图

7 月 27 日&#xff0c;由中国信通院主办的“2023 数字生态发展大会”暨中国信通院“铸基计划”年中会议在北京召开。本次大会重磅发布了《高质量数字化转型产品及服务全景图&#xff08;2023 上半年度&#xff09;》。图扑软件凭借自研 HT for Web 数字孪生可视化产品成功入选…

Swagger技术-自动生成测试接口

简介 前端资源和后端资源分开&#xff0c;前端通过nginx运行&#xff0c;后端通过tomcat运行 前端技术框架&#xff1a; Swagger 作用&#xff1a;生成各种样式的接口文档&#xff0c;以及在线接口调试页面等 kinfe4j是基于mvc框架继承swagger生成api文档的增强解决方案 …