vite.config.js 无法使用__dirname的解决方法

简介: 在使用 vite 的时候发现,在其 vite.config 文件中无法使用 __dirname 来代表当前目录,所有经过一番了解之后有了这篇文章。

__dirnamecommonjs规范的内置变量。如果使用了esm 是不会自动注入这个变量的。

commonjs中,注入了__dirname__filename, module, exports, require五个内置变量用于实现导入导出的能力。而在 esm 中实现方式是不一样的。

esm 中,显然模块的导入导出使用 export/import ,自然不会再用 exports/require,同理__dirname__filename 也有对应的写法。

// 方法一
import {
    URL, fileURLToPath } from "node:url";

// 获取__filename
function getCurrnetFile () {
   
    return fileURLToPath(import.meta.url);
}
// 获取__dirname
function getCurrnetDir () {
   
    const url = new URL(".", import.meta.url);
    return fileURLToPath(url);
}

// 方法二
import {
    dirname } from "node:path";
import {
    fileURLToPath } from "node:url";

// 获取__filename
function getCurrnetFile () {
   
    return fileURLToPath(import.meta.url);
}
// 获取__dirname
function getCurrnetDir () {
   
    const __filename = fileURLToPath(import.meta.url);
    const __dirname = dirname(__filename);
    return __dirname;
}

可以看到使用了一个关键API import.meta.url,其实 import.metaECMA规范的一部分:

The import.meta object exposes context-specific metadata to a JavaScript module. It contains information about the module, like the module’s URL.

言下之意,import.meta 提供了一个模块的上下文信息。

相关文章
|
2月前
|
JavaScript 前端开发 Java
springboot从控制器请求至页面时js失效的解决方法
springboot从控制器请求至页面时js失效的解决方法
springboot从控制器请求至页面时js失效的解决方法
|
2月前
|
JavaScript 前端开发
springboot+layui从控制器请求至页面时js失效的解决方法
springboot+layui从控制器请求至页面时js失效的解决方法
|
11天前
|
前端开发 JavaScript
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
文本,wangEditor5展示HTML无样式,wangEditor5如何看源码,Ctrl + U看CSS文件,代码高亮,Prism.js可以实现,解决方法,参考网页源代码的写法
若依修改,改若依首页,若依修改了路由不出现如何解决,修改路由必须在permission.js中的白名单添加新的路由,修改了路由,不出现,解决方法是在白名单中添加对应的路径:
若依修改,改若依首页,若依修改了路由不出现如何解决,修改路由必须在permission.js中的白名单添加新的路由,修改了路由,不出现,解决方法是在白名单中添加对应的路径:
|
1月前
|
前端开发 JavaScript 开发者
JavaScript中的异步操作与回调地狱解决方法
JavaScript中的异步操作与回调地狱解决方法 在现代的Web开发中,JavaScript扮演着极为重要的角色,尤其是在处理网络请求、文件操作或者任何可能耗费时间的操作时。为了不阻塞程序的执行,JavaScript 提供了异步编程模型。本文将介绍JavaScript中的异步操作是什么,什么是回调地狱,以及如何解决回调地狱问题。 什么是异步操作? 异步操作指的是那些不会立即完成的操作,程序可以在等待异步操作完成的同时,继续执行其他代码。JavaScript通常使用事件循环机制处理异步操作,这使得它可以在不阻塞主线程的情况下执行任务。 常见的异步操作包括: 网络请求(如使用 XMLHt
18 2
|
2月前
|
JavaScript 前端开发
JavaScript 解决数组查重 问题(三种解决方法)
JavaScript 解决数组查重 问题(三种解决方法)
20 0
|
2月前
|
Web App开发 监控 前端开发
深入理解JavaScript内存泄漏:原因与解决方法
深入理解JavaScript内存泄漏:原因与解决方法
|
11月前
|
JavaScript 中间件 关系型数据库
js编程时常见问题解决方法
js编程时常见问题解决方法
js编程时常见问题解决方法
|
11月前
|
存储 缓存 JavaScript
什么是javascript内存泄漏?以及解决方法
内存泄漏(Memory leak)是在计算机科学中,由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。 简单理解:无用的内存还在占用,得不到释放和归还,比较严重的时候,无用的内存还会增加,从而导致整个系统卡顿,甚至崩溃
153 0
|
12月前
|
前端开发 JavaScript
js对map排序,后端返回有序的LinkedHashMap类型时前端获取后顺序依旧从小到大的解决方法
在后端进行时间倒序查询后,返回map类型的数据,在postman获取是这样:
387 0