首页 > 其他分享 >在esm中优雅的使用__dirname

在esm中优雅的使用__dirname

时间:2024-09-23 10:03:31浏览次数:9  
标签:__ const stackLines --- import esm dirname

在esm中没有这些 __dirname、require,因为这是cjs的规范。
但是通过如下代码,你即可使用上

import path from "node:path";
import { createRequire } from "node:module";
import { fileURLToPath } from "node:url";

// 定义一个全局变量 __dirname
let dirnameVal = '';
Object.defineProperty(global, "__dirname", {
  get() {
    // ---这段代码不能提出去---
    const stackLines = new Error().stack.split("\n");
    const callerLine = stackLines[2];
    const [_, callerFilePath] = callerLine.match(/\(([^)]*)\)/);

    // --- 返回出去 ---
    return path.dirname(fileURLToPath(callerFilePath));
  },
  set(value) {
    dirnameVal = value;
  },
});





global.require = (path)=>{
     // ---这段代码不能提出去---
     const stackLines = new Error().stack.split("\n");
     const callerLine = stackLines[2];
     const [_, callerFilePath] = callerLine.match(/\(([^)]*)\)/);
 
    return createRequire(import.meta.url)
};

标签:__,const,stackLines,---,import,esm,dirname
From: https://www.cnblogs.com/dingshaohua/p/18426451

相关文章

  • 为何有时出现:Allowed memory size of 134217728 bytes exhausted (tried to allocate
    出现“Allowedmemorysizeof134217728bytesexhausted(triedtoallocate20480bytes)”这样的错误,意味着PHP脚本运行时消耗的内存超过了PHP配置允许的最大内存限制。这个错误通常是因为PHP脚本处理的数据量过大、内存消耗较高的任务或配置不当引起的。以下是几种解决......
  • 南沙C++信奥老师解一本通题 1260:【例9.4】拦截导弹(Noip1999)
    ​【题目描述】某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦......
  • 无参数RCE
    首先来看情境if(';'===preg_replace('/[^\W]+\((?R)?\)/','',$_GET['star'])){eval($_GET['star']);}无参数rce就是限制我们传入的为不含参数的函数.就比如scandir()是允许的,但是scandir('1')就是不允许的.相关函数介绍scandir()//返回当前......
  • DevExpress WPF中文教程:如何解决行焦点、选择的常见问题?
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。无论是Office办公软件的衍伸产品,还是以数据为中心......
  • 网站数据库错误的原因通常包括配置错误、编码错误、硬件故障、网络问题、数据损坏、权
    网站数据库错误可能由多种因素引起,主要包括以下几点:配置错误:数据库或应用程序的配置不当可能导致连接失败或其他运行时错误。编码错误:程序中的逻辑错误或语法错误也可能导致数据库操作失败。硬件故障:服务器硬件出现问题,如硬盘损坏、内存故障等,会影响数据库的正常运行。网络问......
  • 网站数据库为什么错误呢
    当网站数据库出现错误时,可能有多种原因。以下是一些常见的原因及解决方法:常见原因及解决方法内存限制问题症状:内存耗尽,如“Allowedmemorysizeof134217728bytesexhausted”。解决方法:修改 php.ini 文件中的 memory_limit 配置项。在PHP脚本中使用 ini_set ......
  • 为什么数据库查询总是报错
    数据库查询总是报错可能有以下几个常见原因:SQL语句错误:语法错误:SQL语句编写不正确,比如缺少分号、括号不匹配等。表或列不存在:查询中引用了不存在的表名或字段名。查询条件错误:WHERE子句中的条件表达式错误,比如比较运算符使用不当、值类型不匹配等。数据库连接问题:连......
  • 磁力万合AI智能全自动挂机掘金脚本,曰进五张
    本项目介绍了一种通过自动化脚本在磁力万合平台上刷视频以产生广告搜易的方法。用户可以通过在小号上安装脚本,自动访问特定账号的视频内容,从而获得广告搜易。项目概述通过在小号上安装自动化脚本,用户可以让这些账号自动访问并播放指定的磁力万合账号视频,模拟正常用户观......
  • 花园管理系统
    基于springboot+vue实现的花园管理系统 (源码+L文+ppt)4-0744功能结构  为了更好的去理清本系统整体思路,对该系统以结构图的形式表达出来,设计实现该“花开富贵”花园管理系统的功能结构图如下所示:图4-1系统总体结构图4.1数据库设计  4.1.1基于MySQL数据库的存......
  • Java面试题大全(全网最全,持续更新)初级(2)
    1.基础语法1.1.Java的数据类型有哪些?Java有两种数据类型:基本数据类型(PrimitiveTypes):包括byte、short、int、long、float、double、char、boolean。引用数据类型(ReferenceTypes):包括类、接口、数组等。1.2.final关键字有什么作用?final关键字可以用来修饰类、方......