You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NWJS应用相对路径失效及变量路径使用问题咨询

NWJS 相对路径/自定义变量路径问题解决方案

问题根因

  • 直接传入../../../SYSTEM.USER/DOCUMENTS/DOCUMENTS.NFO这类层级相对路径时,path.resolve默认以NW进程启动时的工作目录为解析基准,这个路径在开发环境、打包后、不同启动方式下都会变动,手写层级相对路径必然出现解析错误。
  • 硬编码D:/开头的绝对路径能运行仅适配当前本地磁盘环境,换设备、换安装位置后直接失效。

自定义变量路径支持说明

  • NWJS 原生不识别/%APPLICATION%/xxx这类自定义变量写法,直接传入会被当作普通字符串路径解析,无法定位到目标文件。
  • Windows 系统自带环境变量(如%APPDATA%、%USERPROFILE%)可通过 Node.js 的process.env对象取值后拼接使用,不能直接把带%的原始字符串传入路径接口。

正确实现代码

路径解析必须以固定的应用根目录为基准,禁止依赖进程工作目录、__dirname这类动态值:NWJS 打包后__dirname会指向临时解压目录,和实际应用安装目录不一致,会导致路径失效。固定基准请用 NWJS 官方提供的nw.App.startPath属性,该属性恒指向 NW 可执行文件所在目录,不受启动方式、运行环境影响。

修正后的 Main.js

const path = require('path');
// 封装自定义变量路径解析逻辑
function resolveAppPath(relativePath) {
    const appRoot = nw.App.startPath;
    // 替换自定义%APPLICATION%变量为应用根目录
    const normalizedPath = relativePath.replace(/^%APPLICATION%[\\/]/, '');
    return path.resolve(appRoot, normalizedPath);
}

function OpenDocuments() {
    // 两种写法二选一即可:直接拼相对路径,或者用自定义变量格式
    // const targetPath = path.resolve(nw.App.startPath, 'SYSTEM.USER/DOCUMENTS/DOCUMENTS.NFO');
    const targetPath = resolveAppPath('%APPLICATION%/SYSTEM.USER/DOCUMENTS/DOCUMENTS.NFO');
    nw.Shell.showItemInFolder(targetPath);
}

对应 Default.html 代码(无需修改,保持原有逻辑即可)

<div name="FolderMenuContainer" id="FolderMenuContainer" class="FolderMenuContainer">
    <span name="FolderIcon" id="FolderIcon" class="material-icons"> description </span>
    <span name="FolderText" id="FolderText" class="FolderText" onclick="OpenDocuments()"> Documents </span>
</div>

注意事项

  • 所有路径拼接统一用path.join/path.resolve处理,不要手动拼接斜杠,Node 会自动适配 Windows、macOS、Linux 的路径分隔符差异。
  • 调试阶段可先通过console.log(nw.App.startPath, targetPath)打印基准路径和最终解析的目标路径,确认和实际文件位置匹配后再正式调用接口。

文件结构参考

文件结构截图1
文件结构截图2

内容的提问来源于stack exchange,提问作者Dustin Angeletti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 10:21:26