在构建 Electron.js 项目时,如何修复根目录之间的差异?

How can I fix the discrepancy between root directories when building an Electron.js project?

当 运行 我的 Electron 项目正常时,如 electron ./artist-test-kit-main.js,一切正常。当我将项目构建为可执行文件时,尝试加载文件开始失败,例如:Uncaught Error: ENOENT: no such file or directory, open 'asset-editor\data.json' 所以我 运行 进行测试以查看根目录与正常(electron ./artist-test-kit-main.js) 执行和 .exe 的。

index.js 中(由 [=17= 启动],由 artist-test-kit-main.js 启动,这是一个标准的 electron.js 发起程序文件):

console.log(fs.readdirSync('./'))

.exe 中输出:

在正常的开发执行中(electron ./artist-test-kit-main.js),输出:

这个普通的项目根目录,打包后存放在.exe执行根目录下看到的resources目录下。所以现在我所有的文件读取似乎都被破坏了,因为根目录中的这种差异。

我该如何解决这个问题?

我的 package.json 显示了使用的构建参数:

{
  "name": "app",
  "version": "1.0.0",
  "description": "",
  "main": "artist-test-kit-main.js",
  "dependencies": {
    ...
  },
  "scripts": {
    "start": "electron .",
    "start-artist": "electron ./artist-test-kit-main.js",
    "build": "electron-packager ./ game --platform=win32 --arch=x64 --overwrite=true",
    "build-art": "electron-packager ./ asset-editor --platform=win32 --arch=x64 --overwrite=true"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron-packager": "^15.4.0"
  }
}

TLDR

使用__dirname代替.

说明

.指的是当前工作目录(cwd),也就是node进程启动的目录

对于未打包的应用程序,这通常是项目的根文件夹,可产生预期的结果。对于打包的应用程序,cwd 可能是存储 Electron 可执行文件的位置。应用程序的内容(以前是根文件夹)放在相对于可执行文件的 resources/appresources/app.asar 内。

统一打包和未打包场景的方法是使用__dirname,其中包含当前运行个Node脚本的目录。这样,它将与在未打包的应用程序中使用 . 相同,但将 return 打包场景中带有 resources/app 的路径,因为这就是当前 运行节点脚本。

这就是为什么您会经常看到人们使用 `file://${__dirname}/assets/index.html` 之类的东西在 Electron 中寻址文件的原因。

旁注

如果您使用 require('./file.js'),路径是相对于调用脚本的位置进行评估的,并且将像您使用 __dirname.

一样工作