【问题标题】:Electron run in production modeElectron 在生产模式下运行
【发布时间】:2020-03-19 23:49:32
【问题描述】:

我正在使用 npm 包https://github.com/sindresorhus/electron-is-dev

出于某种原因,isDev 总是返回 true。

我的 npm 脚本如下所示:

"start:prod": "cross-env NODE_ENV=production && electron dist/main.js"

main.js:

import isDev from 'electron-is-dev';

app.on('ready', () => {
  console.log('isDev', isDev);
  if (!isDev) {
    const {session} = require('electron');
    session.defaultSession.webRequest.onHeadersReceived((details, callback) => {
      callback({responseHeaders: `default-src http: ws:`})
    })
  }
  const win = createWindow();
  createMenu(win);
});

控制台输出:

isDev true

文档提到:

您可以通过设置 ELECTRON_IS_DEV 来强制开发模式 环境变量为 1。

但我认为没有必要将变量置零。

输出 process.env.ELECTRON_IS_DEV 未定义日志。

我发现以下线程让我感到困惑:https://github.com/electron/electron/issues/7714

当您在启动时设置 NODE_ENV 时,我看不到使用额外的环境变量...除非有令人信服的理由不这样做,否则我会像以前一样检查 process.env.NODE_ENV

【问题讨论】:

  • 开发工具是指电子窗口中的检查面板,还是其他意思。
  • @ameer 我没有看到我在哪里提到了 devTools...

标签: javascript electron


【解决方案1】:

我不使用那个 npm 包,但我会分享我所做的——(不知道它是对还是错,但它有效。我在开发期间使用它来运行 electron-reload)。

package.json – 在我的“开始”脚本中设置一个环境变量

  "scripts": {
    "start": "APP_DEV=true electron ."
   }

main.js - 检查“main.js”中的环境变量

var isDev = process.env.APP_DEV ? (process.env.APP_DEV.trim() == "true") : false;

使用它

if (isDev) {
    require('electron-reload')(__dirname, {
        electron: upath.toUnix(upath.join(__dirname, 'node_modules', '.bin', 'electron'))
    });
}

更新: 4.28.20

不得不将我的项目带到 Windows 机器上来解决一些特定于 Windows 的问题,而上面的方法在那里不起作用。这是我的问题和一个可以在 Windows 上运行的答案:Setting an env var in package.json for use with electron-reload?

【讨论】:

  • 这样做对只使用默认的 NODE_ENV 变量有好处吗?
  • @Trace - 老实说,我不知道。我已经这样做了几年了,不记得了——我想我在使用默认的 NODE_ENV 变量时遇到了一些问题。上面的方法奏效了,所以我继续做其他事情。
  • 好的,谢谢@NoGrabbing(笑)。同样在这里。我会用这个;如果迟早会出现问题,或者(最好)永远不会。
【解决方案2】:

我注意到开发中的 process.env 变量包含有关 npm_package 的信息,这在生产构建中不存在。 检查 process.env.npm_node_execpath 会为我提供有关 prod 或 dev 的信息。

【讨论】:

    【解决方案3】:

    您可以为此使用电子内置变量 app.isPackaged 可以在这里找到https://www.electronjs.org/docs/api/app#appispackaged-readonly 添加以下行自己检查

    console.log(app.isPackaged);
    

    其他

    如果您使用的是 Electron-is-dev,请使用

    "start": "set ELECTRON_IS_DEV=0 && electron ."
    

    这会将环境设置为生产环境。 并将其设置回 DEV 将 0 替换为 1。

    参考资料 - https://www.geeksforgeeks.org/manage-staging-environments-in-electronjs/

    【讨论】:

      猜你喜欢
      • 2021-05-23
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 2013-03-05
      相关资源
      最近更新 更多