为什么需要 Node.js 的 URL 处理工具?
关键问题:ES 模块与传统模块的路径差异
1. 传统 CommonJS 模块的做法
在传统的 Node.js 模块(使用 require)中,我们会这样获取当前文件所在目录的路径:
javascript
复制
const path = require('path');
const dirPath = path.join(__dirname, 'src'); // __dirname 是当前文件所在目录
__dirname 直接给出了当前文件的目录路径,比如 /Users/me/project/src。
2. ES 模块的新挑战
但在 ES 模块(使用 import/export)中:
-
没有
__dirname这个变量 -
取而代之的是
import.meta.url,但它返回的是 URL 格式的字符串,比如file:///Users/me/project/src/config.js
为什么需要转换?
问题场景
在 Vite 配置中,我们需要设置路径别名:
javascript
复制
alias: {'@': '/path/to/src' // 这里需要真实的文件系统路径
}
但是:
-
我们只有
import.meta.url(URL 格式) -
我们需要把它转换成普通路径格式
解决方案步骤
-
new URL('./src', import.meta.url)-
基于当前文件的 URL (
import.meta.url) -
解析相对路径
./src -
得到完整的文件 URL,如
file:///Users/me/project/src
-
-
fileURLToPath()-
把
file:///Users/me/project/src -
转换成普通路径
/Users/me/project/src
-
为什么不能直接用字符串处理?
-
跨平台问题
Windows 和 Unix 的路径格式不同(C:\vs/) -
编码问题
URL 中的特殊字符需要正确处理 -
可靠性
使用标准 API 比手动字符串操作更可靠
实际代码解析
javascript
复制
import { fileURLToPath, URL } from 'node:url'// 转换过程:
// 1. import.meta.url → 当前文件的URL (file:///...)
// 2. new URL('./src', import.meta.url) → src目录的URL
// 3. fileURLToPath() → 转换成普通路径
resolve: {alias: {'@': fileURLToPath(new URL('./src', import.meta.url))}
}
总结
| 步骤 | 工具 | 输入 | 输出 |
|---|---|---|---|
| 1. 获取当前文件URL | import.meta.url | - | file:///.../config.js |
| 2. 解析相对路径 | new URL() | ./src + 基础URL | file:///.../src |
| 3. 转换URL为路径 | fileURLToPath() | file:///.../src | /.../src |
这样做的目的是在 ES 模块环境下,安全可靠地获取文件系统路径,特别是在配置路径别名这种需要精确路径的场景下。
相关文章:
为什么需要 Node.js 的 URL 处理工具?
关键问题:ES 模块与传统模块的路径差异 1. 传统 CommonJS 模块的做法 在传统的 Node.js 模块(使用 require)中,我们会这样获取当前文件所在目录的路径: javascript 复制 const path require(path); const dirPat…...
力扣HOT100之矩阵:48. 旋转图像
这道题本来想用剥洋葱的办法的,一直写不对,放弃了。。。直接去看题解,用剥洋葱其实也可以做,就是要从外层处理到内层,每一个边界上的元素为matrix[0].size() - 1个,这样一来,四条边界上的元素个…...
uniapp微信小程序获取用户手机号uniCloud云开发版
开发微信小程序,很多时候需要获取用户的手机号,这样方便平台更好的为用户服务,但是微信小程序不允许开发者直接获取用户的手机号,需要用户手动授权才能获取手机号,且需要配合后端进行解密才能获得完整的手机号…...
基于神经网络的文本分类的设计与实现
标题:基于神经网络的文本分类的设计与实现 内容:1.摘要 在信息爆炸的时代,大量文本数据的分类处理变得至关重要。本文旨在设计并实现一种基于神经网络的文本分类系统。通过构建合适的神经网络模型,采用公开的文本数据集进行训练和测试。在实验中&#x…...
31天Python入门——第18天:面向对象三大特性·封装继承多态
你好,我是安然无虞。 文章目录 面向对象三大特性1. 封装2. 继承3. 多态4. 抽象基类5. 补充练习 面向对象三大特性 面向对象编程(Object-Oriented Programming, 简称OOP)有三大特性, 分别是封装、继承和多态.这些特性是面向对象编程的基础, …...
第十六届蓝桥杯模拟二(串口通信)
由硬件框图可以知道我们要配置LED 和按键 一.LED 先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题 二.按键 按键配置,由原理图按键所对引脚要GPIO_Input 生成代码,在文件夹中添加code文件夹,code中添加fun.…...
22--交换安全与端口隔离完全指南:MAC地址的奇幻漂流
🌐 交换安全与端口隔离完全指南:MAC地址的奇幻漂流 🎩 引言:当数据包参加假面舞会 想象一下,网络世界正在举办盛大的假面舞会。每个设备都戴着MAC地址面具入场,交换机就是严格的安检员。本文将带你揭秘&…...
Redis和三大消息队列
一、中间件核心概念解析 1. Redis Redis是一种高性能的内存数据库,支持多种数据结构和持久化机制,常用于缓存、队列等场景。 (1)核心数据结构 数据结构特性与典型应用场景String存储文本、数值(如计数器࿰…...
1.2-WAF\CDN\OSS\反向代理\负载均衡
WAF:就是网站应用防火墙,有硬件类、软件类、云WAF; 还有网站内置的WAF,内置的WAF就是直接嵌在代码中的安全防护代码 硬件类:Imperva、天清WAG 软件:安全狗、D盾、云锁 云:阿里云盾、腾讯云WA…...
UE5学习笔记 FPS游戏制作32 主菜单,暂停游戏,显示鼠标指针
文章目录 一主菜单搭建UI显示主菜单时,暂停游戏,显示鼠标绑定按钮 二 打开主菜单 一主菜单 搭建UI 添加一个MainUi的控件 添加一个返回游戏的按钮和一个退出游戏的按钮 修改一下样式,放中间 显示主菜单时,暂停游戏࿰…...
LLM - 开源强化学习框架 OpenR1 的环境配置与训练参数 教程
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/146838740 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 OpenR1 是一个开源的强化学习框架,复现 DeepSeek-R1 的训练流程,为研…...
蓝桥杯备赛之枚举
用循环等方式依次去枚举所有的数字组合,一一验证是否符合题目的要求 题目链接 0好数 - 蓝桥云课 题目解析 好数的概念: 数的奇数位位奇数,偶数位为偶数,就是一个好数 求输入n里面有多少个好数 题目原理 1> 遍历每个数 2> 每次遍历判断是不是好数 把这…...
C++编程语言:抽象机制:一个矩阵的设计(Bjarne Stroustrup)
第29章 一个矩阵的设计(A Matrix Design) 目录 29.1 引言 29.1.1 基本的 Matrix 用法 29.1.2 Matrix 的要求 29.2 一个 Matrix 模板 29.2.1 构造和赋值(Construction and Assignment) 29.2.2 下标和分片(Subscripting and Slicing) 29.3 Matrix算术运算(Matrix…...
MSYS2学习笔记
前言 本文内容是MSys2 Documentation的学习笔记可以使用MSYS2编译QGis 学习笔记 什么是MSYS2? MSYS2(Minimal System 2)是一个为Windows平台打造的软件开发环境和包管理系统,它结合了Cygwin的POSIX兼容层、Arch Linux的pacman…...
Vue 2 和 Vue 3 有什么区别
Vue 2 和 Vue 3 是 Vue.js 框架的两个主要版本,它们在核心特性、性能、API 设计等方面有一些显著的区别。以下是它们的主要区别: 1. 核心特性 • Composition API: • Vue 3 引入了 Composition API,这是一种新的 API࿰…...
合规+增效 正也科技携智能营销产品出席中睿论坛
正也科技作为医药数字化领域的标杆企业,受邀参展第二届中睿医健产业企业家年会暨第十三届中睿医药新春论坛,本次论坛以“合力启新程”为主题,吸引了800多位医药健康企业的董事长、总经理参与,并通过主论坛、分论坛、路演等形式探讨…...
计算机网络 TCP/IP参考模型
目录 TCP IP模型预览 OSI和TCP的相同点 OSI和TCP的不同点 层参考模型 层参考模型的数据封装与解封装 TCP IP模型预览 OSI和TCP的相同点 OSI和TCP的不同点 层参考模型 层参考模型的数据封装与解封装...
小程序:富文本的处理
小程序:富文本的处理 details.vue <template><view class="pageContainer details no-safe-area-inset-bottom"><view class="mo-card" style="margin: 0;box-shadow: none;"><view class="mo-card-header">…...
JSON的基础知识
文章目录 前言json协议的基本格式json 数组类型 的语法规则json协议报文的实例json常见的一些格式错误在gd32中使用cjson库小结 前言 json协议在互联网应用,物联网应用中都会用到。所谓工欲善其事必先利其器,我们需要学习了解json协议的具体格式…...
区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区间预测
区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 区间预测 | MATLAB实现QRBiGRU门控循环单元分位数回归时间序列区…...
从研究动机视角对无监督图像去雾论文的分类
对目前拥有(2020年--2024年)的无监督图像去雾论文进行动机分类。总计51篇。 1.数据依赖与配对数据稀缺问题 1.1 论文《DEHAZE-GLCGAN: UNPAIRED SINGLE IMAGE DEHAZING VIA ADVERSARIAL TRAINING》- 2020年 模型的特点如下: 将去雾问题转化…...
11 配置Hadoop集群-免密登录
第一课时 一、复习导入 前面的课程中我们在虚拟机上安装并测试使用了hadoop的示例程序wordcount,并且在准备好了集群的同步工具,那接下来,我们就可去配置hadoop集群了。 二、授新 (一)认识ssh命令 SSH(Secu…...
13 配置Hadoop集群-测试使用
第一课时 一、导入 前面的课程我们搭建了hadoop集群,并成功启动了它,接下来我们看看如何去使用集群。 测试的内容包括:1.上传文件,2.下载文件,3.运行程序 二、授新 (一)上传小文件 上传文件的时…...
Android Product Flavors 深度解析与最佳实践:构建多版本应用的全方位指南
1. 高效配置模板 1.1 现代化多维度配置 (Kotlin DSL) android {flavorDimensions listOf("version", "market", "environment")productFlavors {register("free") {dimension "version"applicationIdSuffix ".free…...
git命令简陋版本
git push git pull 临时仓库暂存区 ##############创建提交################ git init #创建git地址 git config --global user.name "***YQ1007" git config --global user.email "***gmail.com" git remote…...
简单ELK框架搭建
简介 ELK 框架是一套开源的日志管理和分析工具,由 Elasticsearch、Logstash 和 Kibana 三个主要组件组成,现在新增了Filebeat组件,可以更高效的收集数据。 Elasticsearch:是一个分布式、高可扩展的开源搜索引擎,能快速…...
Notepad++正则匹配案例
正则表达式 – 简介 | 菜鸟教程 正则表达式在线测试 | 菜鸟工具 \s 表示空白字符。包括,空格,制表符等 “ ” 只表示空格。 \s 可匹配至少一个空白字符。 [ ] 只表示多个空格。 \d 数字 () 定义变量,括号里的为一个变量,读取变…...
Vue2和Vue3响应式的基本实现
目录 简介Vue2 响应式Vue2 响应式的局限性 Vue3 响应式Vue3 响应式的优点 Vue2 和 Vue3 响应式对比 简介 在 Vue 框架中,数据的响应式是其核心特性之一。当页面数据发生变化时,我们希望界面能自动更新,而不是手动操作 DOM。这就需要对数据进…...
RCE(自增、取反、异或)
自增: 也就是说,a > b,b > c... 所以,我们只要能拿到一个变量,其值为a,通过自增操作即可获得a-z中所有字符。 无字母数字构造: 所有敏感字符串(ASSERT、_POST)通过自增动态生…...
C语言字符串处理相关函数详解
C语言字符串处理相关函数详解 相关函数详解1. **字符串拷贝**:strcpy 和 strncpy 2. **字符串连接**:strcat 和 strncat 3. **字符串比较**:strcmp 和 strncmp 4. **字符串长度**:strlen 5. **字符串查找**:strchr 和 …...
