【问题标题】:Electron deployed app not running, can't find module 'electron-reload'Electron 部署的应用程序未运行,找不到模块“electron-reload”
【发布时间】:2018-08-23 01:13:48
【问题描述】:

我正在学习 Electron,所以我第一次使用它,关注 this tutorial by DesignCourse。在继续之前,我不断检查以确保我的代码正常工作。我可以确认,每当我在命令提示符下使用 npm start 运行它时,它都能正常运行。

但是,每当我尝试将其部署到可以发送给其他人的应用程序中时,都会遇到一些错误。最大的问题是,当应用程序被打包时,尝试运行应用程序会得到一个关于缺少模块“电子重载”的错误。我不知道这个模块怎么会丢失。我有linked an image of the error here。如何解决此问题以让我的应用程序运行?

还有另一个相关问题。当我第一次打包应用程序时,我当时没有任何错误。但如果我再次尝试打包应用程序,我会得到this error about asar。我不相信我在第一次打包和任何后续尝试之间更改了我的代码中的任何其他内容,除了我的 package.json 文件中的版本号。为什么这个错误现在出现而不是以前出现?

编辑:糟糕,我忘记了一个可能有帮助的小细节!虽然我可以从命令提示符运行该应用程序,但每次我这样做时都会收到一条奇怪的消息。它说"Electron could not be found. No hard resets for you!", but the app still runs。这是为什么呢?

【问题讨论】:

    标签: javascript html deployment electron


    【解决方案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 二进制文件的路径初始化 electron-reload。要点是我们只想在开发环境中使用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')
        });
    }
    

    【讨论】:

    • 谢谢 NG,我想我明白这可能是如何导致问题的。不幸的是,您的解决方案并不完全有效。每当我应用它并尝试再次运行 npm start 时,我的命令提示符中都会出现以下错误文本; 'APP_DEV' 不是内部或外部命令、可运行程序或批处理文件。但是,我尝试只是注释掉我原来的电子重载要求。这样做消除了运行 npm start 时的“找不到 Electron”错误,它允许我正确打包和运行应用程序!所以你帮了很多忙,谢谢!
    • 很高兴它得到了半排序。
    【解决方案2】:

    正如 NG 所说,问题在于我试图在开发环境之外使用电子重载。通过简单地删除电子重新加载的要求,该程序能够成功部署并作为应用程序运行,没有我在问题中分享的三个错误中的任何一个(好吧,我仍然收到关于 asar 不接受参数的警告,但是这次程序成功部署)。非常感谢 NG!

    【讨论】:

      【解决方案3】:

      您不需要任何额外的标志,只需使用 if (!app.isPackaged) {require...} 即可完成。

      【讨论】:

        【解决方案4】:

        我以前遇到过这个问题。这是通过删除主电子js中的以下行来解决的。

           require('electron-reload')(_dirname)

        【讨论】:

          【解决方案5】:

          正如其他人所说,在您的代码中删除对 package.json 文件中“devDependencies”中包的任何引用。它们不会捆绑在您的生产版本中,并且会破坏应用程序。

          例如如果使用“devtron”,则将其注释掉

          // require("devtron").install(); -- doesn't exist!
          

          【讨论】:

            【解决方案6】:

            我刚刚尝试过这段代码,它对我有用。

            if (process.env.NODE_ENV === 'development') { require('electron-reload')(__dirname) };
            

            【讨论】:

              猜你喜欢
              • 2017-12-02
              • 2019-12-30
              • 1970-01-01
              • 2019-08-09
              • 2020-09-17
              • 2018-06-13
              • 2016-05-23
              • 2017-09-09
              • 2021-09-06
              相关资源
              最近更新 更多