在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) => { // 需要注意的是 只能使用它来引入cjs或json
// ---这段代码不能提出去---
const stackLines = new Error().stack.split("\n");
const callerLine = stackLines[2];
const [_, callerFilePath] = callerLine.match(/\(([^)]*)\)/);
const trequire = createRequire(callerFilePath);
return trequire(path);
};

在esm中优雅的使用__dirname的更多相关文章

  1. 如何在NodeJS项目中优雅的使用ES6

    如何在NodeJS项目中优雅的使用ES6 NodeJs最近的版本都开始支持ES6(ES2015)的新特性了,设置已经支持了async/await这样的更高级的特性.只是在使用的时候需要在node后面加 ...

  2. 如何在MyBatis中优雅的使用枚举

    问题 在编码过程中,经常会遇到用某个数值来表示某种状态.类型或者阶段的情况,比如有这样一个枚举:   public enum ComputerState { OPEN(10), //开启 CLOSE( ...

  3. 如何在 Swoole 中优雅的实现 MySQL 连接池

    如何在 Swoole 中优雅的实现 MySQL 连接池 一.为什么需要连接池 ? 数据库连接池指的是程序和数据库之间保持一定数量的连接不断开, 并且各个请求的连接可以相互复用, 减少重复连接数据库带来 ...

  4. 如何在Vue中优雅的使用防抖节流

    1. 什么是防抖节流 防抖:防止重复点击触发事件 首先啥是抖? 抖就是一哆嗦!原本点一下,现在点了3下!不知道老铁脑子是不是很有画面感!哈哈哈哈哈哈 典型应用就是防止用户多次重复点击请求数据. 代码实 ...

  5. 这样也行,在lambda表达式中优雅的处理checked exception

    目录 简介 lambda表达式中的checked exception lambda中的unchecked exception 对lambda的最终改造 总结 简介 最近发现很多小伙伴还不知道如何在la ...

  6. 阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON

    项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发 ...

  7. 在vue-cli3中优雅的使用 icon

    首先我们得有图标 这里我们从网上下载svg文件或者UI给你导出svg文件 我们在src 文件下新建一个放置svg 文件 的文件夹 @/src/icons.将所有 icon 放在这个文件夹下. 创建 i ...

  8. 如何在自定义Filter中优雅的实现静态资源放行

            在javaweb开发中,过滤器Filter比较常用于类似登录的拦截等场景.但是,当过滤器的配置不当时就会把所有的请求都拦截,静态资源也会被拦截掉,导致静态页面加载不出来. 一般的解决方 ...

  9. ThreadLocal中优雅的数据结构如何体现农夫山泉的广告语

    本篇文章主要讲解 ThreadLocal 的用法和内部的数据结构及实现.有时候我们写代码的时候,不太注重类之间的职责划分,经常造出一些上帝类,也就是什么功能都往这个类里放.虽然能实现功能但是并不优雅且 ...

  10. Spring项目中优雅的异常处理

    前言 如今的Java Web项目多是以 MVC 模式构建的,通常我们都是将 Service 层的异常统一的抛出,包括自定义异常和一些意外出现的异常,以便进行事务回滚,而 Service 的调用者 Co ...

随机推荐

  1. Eclipse 中 JAVA AWT相关包不提示问题(解决)

    原因: 由于在2021年7月15日 OpenJDK管理委员会全票通过批准成立由Phil Race担任初始负责人的 Client Libraries Group(客户端类库工作组). 新的工作组将继续赞 ...

  2. robotframework:运用JavaScript进行定位元素以及页面操作

    在ui自动化时,有些特殊情况需要用到js操作,在进行js操作前要先进行js元素定位.一.js元素定位 1.id定位 document.getElementById("id") 2. ...

  3. CF1424G题解

    思路 这个题意思很显然,是求 nnn 个区间重叠最多的地方和值. 那么我们能想到用差分数组,在扫一遍的过程中维护最大值和 pospospos. 但是需要注意的是,区间最大会到 10910^9109,直 ...

  4. 从零开始:基于CUDA 12.6的YOLOv5模型训练实战(RTX 2050显卡全流程)

    基于cuda12.6训练yolov5模型 前面完成了使用CPU调用yolov5s模型进行识别车辆,现在想训练自己的模型进行目标识别,使用CPU效率太低,尝试使用GPU加速的Pytorch,再重新整理了 ...

  5. 【ROS】6.1 中间人攻击移动过程

    原视频 中间人攻击 实验目的 ARP欺骗可以作为中间人攻击的一个起手式.前一个实验我们完成了ARP欺骗,在本章实验中,我们将会在上一个实验的基础上,针对键盘控制过程的报文进行修改,使键盘控制异常. 本 ...

  6. 信息资源管理综合题之“QS认证是什么标准 和 如何证明已通过QS 和 可否建立自己的生产标准”

    一.案例:自2003年起,我国开始对大米.食用植物油等食品进行了一种新的管理制度:食品质量安全市场准入制度,到目前为止,所有经过加工的食品,生产地址在国内的产品全部必须申请生产许可证,经过强制性的检验 ...

  7. 操作系统综合题之“用记录型信号量机制的wait操作和signal操作写出三个进程的同步代码(水果进箱问题-代码补充)”

    1.问题:假设一个水果赛选系统由三个进程A.B.C组成.进程A每次取一个水果,之后存放在货架F上,F的容量为每次只能存放一个水果.若货架上存放的是苹果则让进程B取出,并存放到苹果箱中:若货架上存放的是 ...

  8. ESP32 MQTT对接巴法云平台

    ESP32 MQTT对接巴法云平台 MQTT(Message Queuing Telemetry Transport)是一种轻量级的 发布/订阅(Publish/Subscribe) 消息传输协议,专 ...

  9. JS的哪些新特性,你都用过么?

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...

  10. 探索Rust:深入了解结构体和枚举的用途与高级功能

    @charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...