「vite」在vite构建的项目中如何使用import.meta.url和__dirname

5,680 阅读1分钟

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:用来动态获取当前文件的绝对路径

总结

image.pngvite.config配置文件中,可以直接使用__dirname;但其他js/ts文件中不能直接使用,会报错,原因是因为用vite搭建的项目使用的是ESM模块化;ESM模块中没有__dirname API