新闻详情

新闻详情

首页 / 资讯中心 / 详情

如何在 zx ESM 脚本中使用 __filename 和 __dirname?

发布时间:2026/9/11 11:41:09来源:尧图网络
如何在 zx ESM 脚本中使用 __filename 和 __dirname?
如何在 zx ESM 脚本中使用 __filename 和 __dirname【免费下载链接】zxA tool for writing better scripts项目地址: https://gitcode.com/GitHub_Trending/zx/zx写.mjs脚本时经常需要定位脚本自身的路径——比如读取与脚本同目录的配置文件、fixture 文件。但 Node.js 的 ESM 模块并不提供__filename和__dirname这两个 CJS 时代的全局变量直接引用会报错。zx 在通过 CLI 执行脚本时把这两个全局变量注入到脚本环境中你在.mjs脚本里可以直接使用无需任何 import。本文给出从准备到验证的完整操作路径。ESM 中缺失的这两个全局变量CLI 文档 明确说明了这个背景和 zx 的补全方式In ESM modules, Node.js does not provide__filenameand__dirnameglobals. As such globals are really handy in scripts, zx provides these for use in.mjsfiles (when using thezxexecutable).也就是说这两个全局变量是zx 的可执行文件CLI在加载脚本时注入的适用条件是.mjs文件且通过zx命令运行。从 src/cli.ts 的实现可以看到注入的具体取值export function injectGlobalRequire(origin: string): void { const __filename path.resolve(origin) const __dirname path.dirname(__filename) const require createRequire(origin) Object.assign(globalThis, { __filename, __dirname, require }) }__filename是脚本文件路径经path.resolve解析后的绝对路径__dirname是该路径的目录部分即脚本所在目录注入目标是globalThis与脚本内同时提供的require()来自同一次注入。准备条件按 docs/setup.md 的要求准备环境操作系统Linux、macOS 或 WindowsJavaScript 运行时Node.js 12.17.0或 Bun 1.0.0、Deno 1.x/2.x、GraalVM Node.jsbash 或 PowerShell。安装 zxnpm install zx编写使用这两个全局变量的脚本新建script.mjs使用.mjs扩展名见 docs/getting-started.md内容如下import path from node:path console.log(__filename) console.log(__dirname) // 以脚本所在目录为基准定位同目录文件 const configPath path.join(__dirname, config.json) console.log(configPath)__filename和__dirname不需要从任何包导入也不需要在脚本里import zx/globals——它们由 zx CLI 注入全局作用域。运行与验证用 zx CLI 执行zx script.mjsnpx zx script.mjs同样有效见 docs/cli.md。预期输出三行第一行是script.mjs的绝对路径即__filename第二行是它所在目录的绝对路径即__dirname第三行是拼接出的config.json路径。仓库自带了可对照的验证方式。测试 test/cli.test.js 中的用例__filename __dirname are defined执行 test/fixtures/filename-dirname.mjs该脚本断言strict.equal(path.basename(__filename), filename-dirname.mjs) strict.equal(path.basename(__dirname), fixtures)即__filename的 basename 应等于脚本文件名、__dirname的 basename 应等于脚本所在目录名断言全部通过即说明这两个全局变量已正确定义。你可以按同样思路验证自己的脚本检查path.basename(__filename)是否等于你的脚本文件名、path.basename(__dirname)是否等于脚本所在目录名。边界与限制必须通过 zx 可执行文件运行。文档将适用范围限定为 when using thezxexecutable直接用node script.mjs启动时Node 的 ESM 环境不会提供这两个变量。Markdown 脚本中的指向通过zx运行.md脚本时__filename指向该markdown.md文件本身见 docs/markdown.mdconsole.log(chalk.yellowBright(__filename))取值基于脚本路径而非调用方式__filename由脚本路径经path.resolve解析而来因此用__dirname拼接同目录文件如config.json时不依赖脚本被从哪个工作目录启动。与__filename/__dirname配套注入的require()同样只在经 zx CLI 运行.mjs时可用文档在 docs/cli.md 的 require() 一节有独立说明本文不再展开。如果执行zx script.mjs后__filename未定义先确认两点脚本扩展名是否为.mjs以及是否确实用 zx 的 CLI而不是裸node启动脚本。【免费下载链接】zxA tool for writing better scripts项目地址: https://gitcode.com/GitHub_Trending/zx/zx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

7×24云端AI程序员:K8s原生架构实现企业级AI编码自治 2026/9/11 13:02:25

7×24云端AI程序员:K8s原生架构实现企业级AI编码自治

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
微网群分布式优化调度:目标级联法原理与Matlab实现 2026/9/11 13:02:25

微网群分布式优化调度:目标级联法原理与Matlab实现

1. 项目背景与核心价值微网群分布式优化调度是当前能源互联网领域的前沿研究方向。随着可再生能源渗透率不断提高,传统集中式调度方法在计算效率、隐私保护和扩展性等方面面临严峻挑战。目标级联法(Analytical Target Cascading, ATC)作为一种…

阅读更多 →
AI Coding新玩法:200个Agent并行协作的工程实践与避坑指南 2026/9/11 13:02:25

AI Coding新玩法:200个Agent并行协作的工程实践与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
不联网也能把语音转成文字:Vosk 离线语音识别实用笔记 2026/9/11 13:02:25

不联网也能把语音转成文字:Vosk 离线语音识别实用笔记

不联网也能把语音转成文字:Vosk 离线语音识别实用笔记 【免费下载链接】vosk-api Offline speech recognition API for Android, iOS, Raspberry Pi and servers with Python, Java, C# and Node 项目地址: https://gitcode.com/GitHub_Trending/vo/vosk-api …

阅读更多 →
OmX `autoresearch` 命令契约全解:从 CLI parity 到 runtime 状态机的实现指南 2026/9/11 13:02:25

OmX `autoresearch` 命令契约全解:从 CLI parity 到 runtime 状态机的实现指南

OmX autoresearch 命令契约全解:从 CLI parity 到 runtime 状态机的实现指南 【免费下载链接】oh-my-codex OmX - Oh My codeX: Your codex is not alone. Add hooks, agent teams, HUDs, and so much more. 项目地址: https://gitcode.com/GitHub_Trending/oh/oh…

阅读更多 →
4 个环节搭好 umi 自定义模板:让 umi create 一条命令生成团队标准项目 2026/9/11 12:59:25

4 个环节搭好 umi 自定义模板:让 umi create 一条命令生成团队标准项目

4 个环节搭好 umi 自定义模板:让 umi create 一条命令生成团队标准项目 【免费下载链接】umi A framework in react community ✨ 项目地址: https://gitcode.com/GitHub_Trending/um/umi 团队里新开一个项目,很多人第一反应是打开那个最成熟的老…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞