在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) => { // 需要注意的是 只能使用它来引入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的更多相关文章
- 如何在NodeJS项目中优雅的使用ES6
如何在NodeJS项目中优雅的使用ES6 NodeJs最近的版本都开始支持ES6(ES2015)的新特性了,设置已经支持了async/await这样的更高级的特性.只是在使用的时候需要在node后面加 ...
- 如何在MyBatis中优雅的使用枚举
问题 在编码过程中,经常会遇到用某个数值来表示某种状态.类型或者阶段的情况,比如有这样一个枚举: public enum ComputerState { OPEN(10), //开启 CLOSE( ...
- 如何在 Swoole 中优雅的实现 MySQL 连接池
如何在 Swoole 中优雅的实现 MySQL 连接池 一.为什么需要连接池 ? 数据库连接池指的是程序和数据库之间保持一定数量的连接不断开, 并且各个请求的连接可以相互复用, 减少重复连接数据库带来 ...
- 如何在Vue中优雅的使用防抖节流
1. 什么是防抖节流 防抖:防止重复点击触发事件 首先啥是抖? 抖就是一哆嗦!原本点一下,现在点了3下!不知道老铁脑子是不是很有画面感!哈哈哈哈哈哈 典型应用就是防止用户多次重复点击请求数据. 代码实 ...
- 这样也行,在lambda表达式中优雅的处理checked exception
目录 简介 lambda表达式中的checked exception lambda中的unchecked exception 对lambda的最终改造 总结 简介 最近发现很多小伙伴还不知道如何在la ...
- 阿里巴巴最新开源项目 - [HandyJSON] 在Swift中优雅地处理JSON
项目名称:HandyJSON 项目地址:https://github.com/alibaba/handyjson 背景 JSON是移动端开发常用的应用层数据交换协议.最常见的场景便是,客户端向服务端发 ...
- 在vue-cli3中优雅的使用 icon
首先我们得有图标 这里我们从网上下载svg文件或者UI给你导出svg文件 我们在src 文件下新建一个放置svg 文件 的文件夹 @/src/icons.将所有 icon 放在这个文件夹下. 创建 i ...
- 如何在自定义Filter中优雅的实现静态资源放行
在javaweb开发中,过滤器Filter比较常用于类似登录的拦截等场景.但是,当过滤器的配置不当时就会把所有的请求都拦截,静态资源也会被拦截掉,导致静态页面加载不出来. 一般的解决方 ...
- ThreadLocal中优雅的数据结构如何体现农夫山泉的广告语
本篇文章主要讲解 ThreadLocal 的用法和内部的数据结构及实现.有时候我们写代码的时候,不太注重类之间的职责划分,经常造出一些上帝类,也就是什么功能都往这个类里放.虽然能实现功能但是并不优雅且 ...
- Spring项目中优雅的异常处理
前言 如今的Java Web项目多是以 MVC 模式构建的,通常我们都是将 Service 层的异常统一的抛出,包括自定义异常和一些意外出现的异常,以便进行事务回滚,而 Service 的调用者 Co ...
随机推荐
- 经过几天的努力Biwen.AutoClassGen终于实现了DTO复杂属性的生成
前言 距写上一篇 https://www.cnblogs.com/vipwan/p/18535459 生成DTO已经有一段时间了, 最初没有考虑复杂二级属性嵌套的实现,而是直接使用排除使用自定义的方式 ...
- HTB-UnderPass
该靶机nmap扫描udp发现161端口snmp服务,利用snmpwalk扫描得到目录信息,使用dirsearch扫描得到一个yml文件,存放数据库账号密码,记录下来,此时需要登录口,使用字典扫描拼接/ ...
- 一、Java语言介绍
1.硬件知识介绍 2.常用dos命令以及快捷键 1 /** 2 *@desc: 复习 3 *@Description: 4 * dir:列出当前文件目录下的所有文件; 5 * md:创建一个新目录; ...
- devops组件搭配选型
名称 作用 备注 sentry 异常捕获系统 gitlab 代码仓库 jenkins 持续集成 open-falcon 监控系统 grafana 监控FE prometheus 监控系统 thanos ...
- 2025dsfz集训Day8:线段树
Day8:线段树 前言:线段树听起来很高大尚,就是儿子节点表示法的树.几乎一样. \[Designed\ By\ FrankWkd\ -\ Luogu@Lwj54joy,uid=845400 \] 特 ...
- 内网穿透——Natapp实现
转自:NATAPP使用教程(内网穿透)_Willing卡卡的博客-CSDN博客_natapp NATAPP内网穿透使用教程 本文主要分享了有关内网穿透NATAPP的使用,包括:注册.建立隧道(免费). ...
- 各式各样的console
目录 知乎的console 百度的console B站的console 知乎的console 我很喜欢hire的文字样式. _____ _____ _____ _____ /\ \ /\ \ /\ \ ...
- 代码随想录第八天| Leecode 344. 反转字符串、Leecode 541 反转字符串 II
Leecode 344 反转字符串 题目链接:https://leetcode.cn/problems/reverse-string/description/ 题目描述 编写一个函数,其作用是将输入的 ...
- HarmonyOS NEXT实战:高仿墨迹天气开发手记(附源码)
老余说3月份的神秘产品是为纯血鸿蒙而生的一款全新形态的手机,别人想象不到的手机产品,这次的保密工作真是非常到位,让人十分期待. 闲言少叙,今天为大家分享新年的第一个实战项目,高仿墨迹天气 这个项目中有 ...
- 纯前端实现图片伪3D视差效果
作者:vivo 互联网前端团队- Su Ning 本文通过depth-anything获取图片的深度图,同时基于pixi.js,通过着色器编程,实现了通过深度图驱动的伪3D效果.该方案支持鼠标/手势与 ...