【问题标题】:How can I detect Node app startup folder on macOS?如何检测 macOS 上的 Node 应用程序启动文件夹?
【发布时间】:2021-04-26 15:43:32
【问题描述】:

我正在开发一个跨平台 NodeJS 服务器/应用程序,它以预构建二进制文件的形式分发,使用 pkg (https://www.npmjs.com/package/pkg) 构建,适用于 Windows、Mac 和 Linux。

在启动时,应用程序应该为应用程序目录生成一个默认的config.json。我正在检测应用程序的当前启动文件夹:

var startUpPath = process.cwd();

这适用于 Windows 和 Linux,但在 macOS 上会失败,而是将文件生成到用户的主目录。

关于 ma​​cOS 的进一步说明:

  • 当使用node myApp.js 运行源代码时,此工作
  • 当使用./myApp 从命令行运行二进制文件时,此工作
  • myApp 在Finder 中双击启动时,此失败

根本原因似乎是macOS进程总是在主目录中启动,而不是在当前目录...?

我确定这是微不足道的,但还没有弄清楚。

这里有什么建议吗?

【问题讨论】:

  • process.cwd() 是您启动 Node 应用程序的目录。 Finder 只是假设用户的主目录。你能用__dirname吗?这是任何给定节点源文件的目录。
  • __dirname 没有帮助,不幸的是。它提供了pkg 文件系统的/snapshot/ 文件夹,而不是实际的物理路径。

标签: javascript node.js macos


【解决方案1】:

最终找到了方法 - 以防其他人正在寻找解决方案。

// Detect startup folder at pkg runtime
if ( process.pkg ) {
    startUpPath = path.resolve(process.execPath + '/..');
} else {
    startUpPath = process.cwd();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多