import.meta.url和__dirname是什么
import.meta.url
属于ES Modules模块化中的API; import.meta
包含当前模块的一些信息,其中 import.meta.url
表示当前模块的 file: 绝对路径,拿到这个绝对路径我们就可以配合其他 API 来实现 __filename
和 __dirname
。
console.log(import.meta.url);
运行会得到一个基于 file 协议的 URL:file:///Users/jingjingjing/Desktop/vite/vite-project2/1.ts
。
fileURLToPath
如果需要把 file 协议转换成路径,我们需要借助 Node.js 内部 url 模块的 fileURLToPath
API。
import path from "path";
import { fileURLToPath } from "url";
console.log(path.dirname(fileURLToPath(import.meta.url)));
将会得到/Users/jingjingjing/Desktop/vite/vite-project2
小结
在实际开发中,import.meta.url
我们好像用的不多,通常会将其处理封装成__dirname
import path from "path";
import { fileURLToPath } from "url";
const __dirname = path.dirname(fileURLToPath(import.meta.url))
__dirname
属于node的全局变量(Common JS);不受执行node命令所属路径影响的。
- __dirname:用来动态获取当前文件模块所属目录的绝对路径
- __filename:用来动态获取当前文件的绝对路径
总结
在
vite.config
配置文件中,可以直接使用__dirname
;但其他js/ts文件中不能直接使用,会报错,原因是因为用vite搭建的项目使用的是ESM模块化;ESM模块中没有__dirname
API