我正在学习Electron,所以我第一次使用它来跟随this tutorial by DesignCourse。在继续之前,我经常检查以确保我的代码正常工作。我可以确认,每当我从命令提示符下运行npm时,它都会正常运行。
但是,每当我尝试将其部署到可以发送给其他人的应用程序中时,我都会遇到一些错误。最大的问题是,当应用程序打包时,尝试运行应用程序会让我错过关于缺少模块“电子重载”的错误。我不知道这个模块怎么会丢失。我linked an image of the error here。如何修复此问题以使我的应用程序运行?
还有另一个相关问题。当我第一次打包应用程序时,我当时没有错误。但是如果我再次尝试打包应用程序,我会得到this error about asar。除了我的package.json文件中的版本号之外,我不相信我在第一次打包和任何后续尝试之间更改了我的代码中的任何其他内容。为什么现在而不是之前出现此错误?
编辑:Woops,我忘记了一个可能有用的小细节!虽然我可以从命令提示符运行应用程序,但每次我这样做都会得到一个奇怪的信息。它说"Electron could not be found. No hard resets for you!", but the app still runs。那是为什么?答案 0 :(得分:2)
正如NG所说,问题是我试图在开发环境之外使用电子重载。通过简单地删除电子重载的要求,该程序能够成功地部署和运行作为一个应用程序,没有我在我的问题中分享的任何三个错误(好吧,我仍然得到关于asar不参与争论的警告,但是这次程序成功部署)。非常感谢NG!
答案 1 :(得分:1)
关于electron-reload
问题,您可能只想在开发环境中使用electron-reload
。我这样做的方式如下所述(该方法是其他人建议的方法 - 我想我只是改变了一些方法)。
我不知道asar
问题。 start
问题可能与项目目录的设置方式和/或您正在使用的start
脚本有关。
在“package.json”中 - 在调用“npm start”时设置环境变量“APP_DEV”:
"scripts": {
"start": "APP_DEV=true electron .",
// other scripts deleted for clarity (package etc.)
}
(有关节点"process"和"process.env"的详情。)
在“main.js”中检查环境变量“APP_DEV”。如果它存在(并且为“true”),则使用app目录和electron-reload
二进制文件的路径初始化electron
。要点是我们只想在开发环境中使用electron-reload
。
var isDev = process.env.APP_DEV ? (process.env.APP_DEV.trim() == "true") : false;
if (isDev) {
require('electron-reload')(__dirname, {
electron: path.join(__dirname, 'node_modules', '.bin', 'electron')
});
}
答案 2 :(得分:0)
我以前有这个问题。这是通过消除主电子js中的跟随线来解决的。
require('electron-reload')(_dirname)
答案 3 :(得分:0)
正如其他人所说,在您的代码中,删除package.json文件内“ devDependencies”中对软件包的所有引用。它们不会捆绑在您的生产版本中,并且会破坏应用程序。
例如如果使用“ devtron”,则将其注释掉
// require("devtron").install(); -- doesn't exist!
答案 4 :(得分:0)
您不需要添加任何额外的标志,只需使用if (!app.isPackaged) {require...}
即可。
答案 5 :(得分:0)
我刚刚尝试了这段代码,它对我有用。
if (process.env.NODE_ENV === 'development') { require('electron-reload')(__dirname) };