- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我最近正在使用Electron.js,并且打包了一些应用程序。今天,我决定弄乱文件的保存和加载等,并且我得到了一个非常可靠的GUI,用于保存,读取,编辑和删除文本文件。它的工作方式是将所有文件写入源代码中的/saves/
目录,然后从同一位置读取。在使用electron .
运行时,它可以完美运行,所以我知道问题不在我的代码中(因此,我什至不在这里包括我的代码,因为我知道问题所在,并且我知道这与问题无关我的代码)
这里的问题是,当我使用electron-packager . electron-tutorial-app --overwrite --asar --platform=win32 --arch=ia32 --icon=assets/icons/win/icon.ico --prune=true --out=release-builds --version-string.CompanyName=CE --version-string.FileDescription=CE --version-string.ProductName=\"Electron Tutorial App\"
打包我的代码并运行输出的.exe文件时,出现以下错误:Error: ENOENT: no such file or directory, scandir 'saves'
当检查打包的文件时,实际上我的/saves/
目录丢失了。它没有与应用程序的其余部分打包在一起,现在无法找到。如果我使用.exe文件在文件夹内手动创建/saves/
目录,则可以正常工作...
所以我想知道的是,有没有一种方法可以告诉electronic-packager将/saves/
目录与项目的其余部分一起打包?是否需要我在命令中添加标志,或者更改我的package.json
?
这是我的package.json
:
{
"name": "reading-and-writing-files",
"version": "1.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "electron .",
"package-win": "electron-packager . electron-tutorial-app --overwrite --asar --platform=win32 --arch=ia32 --icon=assets/icons/win/icon.ico --prune=true --out=release-builds --version-string.CompanyName=CE --version-string.FileDescription=CE --version-string.ProductName=\"Reading and Writing Files\""
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"electron": "11.2.0",
"electron-packager": "^15.2.0"
}
}
最佳答案
通过在--asar
脚本中使用package-win
开关,您可以告诉Electron Packager将应用程序的所有源代码(包括任何目录)写入Asar归档文件。这是一个类似TAR的存档文件,位于构建目录中的resources/app.asar
下(对于您而言,完整路径为release-builds/<your app name and plattform>/resources/app.asar
)。您的应用程序可以正常运行,因为Electron会为您处理从存档中加载文件。
但是,由于这是一个归档文件,因此您不能简单地向其中写入文件,并且似乎您是在自己构造/saves/
目录的路径,而不是使用__dirname
指向该Asar归档文件。
话虽这么说,一种可能的解决方法是根本不使用Asar(通过从--asar
脚本中删除package-win
开关),这将使您的应用程序源几乎不 protected ,或者通过检查saves/
目录是否存在并创建如果不是在应用启动时进行的话,这似乎是可行的方法。
为此,请将以下代码添加到主进程的文件中的任何位置,以main.js
为例(我建议将此代码放在顶部附近):
const fs = require ("fs"),
{ app } = require ("electron"); // Remove if already loaded
if (__dirname.includes (".asar")) { // (1)
var exePath = app.getPath ("exe"), // (2)
splitPath = exePath.replace (/\\/g, "/").split (/\//); // (3)
splitPath.pop (); // (4)
exePath = splitPath.join ("/"); // (5)
var savesPath = exePath + "/path/to/saves"; // (6)
if (!fs.existsSync (savesPath)) {
fs.mkdirSync (savesPath);
}
}
说明:在执行任何操作(1)之前,我们通过检查当前文件的路径是否包含“.asar”来检查我们是否正在生产中(即,不在Asar归档文件中)。然后,我们要求Electron将路径返回到当前的可执行文件(2)。这可用于确定
saves
目录的所需路径。在(3)中,我们删除了可能在Windows上出现的所有反斜杠,并用正斜杠替换了它们以确保跨平台兼容性,并用那些斜杠分割了字符串,因此我们得到了一系列路径段(即目录)。然后,我们从该数组中删除最后一个元素,因为这将是Windows上
.exe
的名称,或者在Linux或macOS上只是可执行文件的名称(4)。然后,我们在(5)中使用正斜杠再次加入数组。然后可以将其用作基本路径。在(6)中,我们最终构造了
saves
目录的路径。请注意,该路径将相对于您的可执行文件(在Windows上
.exe
),因此,如果您希望目录直接与可执行文件位于同一目录中,则使用
/saves
而不是
/path/to/saves
就足够了。如果不存在这样的路径,则您的应用程序将创建目录。
关于node.js - electronic-packager并未使用它 package 我的目录之一。有任何解决这个问题的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65746563/
我正在尝试使用 JAXB 从 XSD 生成 java 类。 XSD 是我公司的官方 xsd,因此我无法仅为我的项目修改它们。在该网站上进行了数百次尝试和搜索后,我决定直接提出问题。 我的 XSD 中有
我已经了解了以下链接中的详细信息,但仍然存在何时使用哪个文件的问题?https://docs.npmjs.com/files/package-lock.json 最佳答案 包.json 包含项目的相关
当我在 centos 上运行命令 rpmbuild -bb mypackage.spec 时,出现错误 error: Package already exists: %package debuginf
my.packages 是 src 目录中的自定义原型(prototype)包。 Plone 实例中的数千个项目与其类型一起添加。我想将包重命名为 my.package。通过简单地卸载 my.pack
根据 javadoc 规范,我在相关包的根目录中放置了一个名为 package-info.html 的文档文件。但是,当我在该文件夹上运行 Doxygen 时,不会拾取该文件中的文档。我如何告诉 Do
我已经定义了如下的包: (defpackage :thehilariouspackageofamirteymuri (:nicknames ampack amir teymuri) (:use
我正在思考这个问题: > .packages() > (.packages()) [1] "stats" "graphics" "grDevices" "utils" "datase
我在内存中有一个 System.IO.Packaging.Package(它是一个 WordprocessingDocument)并且想将它流式传输到浏览器以保存它。 Word 文档已被基于 MVC
即使这是我不常发现的东西,在成员之前注释/* package*/的原因是什么? /* package */ final void attach(Context context) { atta
我正在开发我的应用程序,但在添加包以便导入它时,我总是收到此错误。 error: type 'Package.Dependency' has no member 'Package' 这是我的 Pack
install.packages("data.table") trying URL 'https://cran.rstudio.com/bin/macosx/el-capitan/contrib/3.
放置手动创建的插件的最佳位置是什么: a) C:\Users\{UserName}\AppData\Roaming\Sublime Text 3\Packages 或 b) C:\Users\{Use
这是一个有趣的 Perl 行为。 (至少对我来说 :) ) 我有两个包 PACKAGE1 和 PACKAGE2,它们导出具有相同名称的函数 Method1()。 由于将有如此多的包将导出相同的功能,使
package-archives (("marmalade" . "http://marmalade-repo.org/packages/") ("gnu" . "http://elpa.gnu.or
任何人都可以让我知道 package-lock.json 文件的确切用途吗? 尽管许多人提到它用于查看版本化依赖树。 寻找简单易行的解释。 提前致谢。 最佳答案 npm install使用此文件来确保
Python documentation说 Consider this code: import sound.effects.echo import sound.effects.surround fr
我在 ubuntu 上运行 VPS: Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.04 C
我有这样一个结构 $ tree -h . ├── [1.0K] myproj │ ├── [ 0] index.py │ ├── [ 0] __init__.py │ └──
我正在尝试解压 System.IO.Packaging.Package我从网络服务器收到的。也就是说,我正在使用 System.IO.Packaging.Package.Open(Stream)方法并
关于 package.json 文件中的@types 依赖项,我有一个愚蠢的问题: 在下面的 URL 中解释了应该安装的类型作为运行时依赖 npm install --save @types/loda
我是一名优秀的程序员,十分优秀!