📜  在 ElectronJS 中管理登台环境

📅  最后修改于: 2021-11-10 05:47:07             🧑  作者: Mango

ElectronJS是一个开源框架,用于使用能够在 Windows、macOS 和 Linux 操作系统上运行的 HTML、CSS 和 JavaScript 等 Web 技术构建跨平台原生桌面应用程序。它将 Chromium 引擎和NodeJS 组合成一个单一的运行时。

在复杂或企业桌面应用程序中,开发人员需要不同的暂存环境来测试和部署应用程序。根据应用程序的范围,在应用程序最终提供给最终用户之前,会设置多个暂存环境来测试和检查应用程序。部署应用程序并向公众提供的最终暂存环境称为Production 。当应用程序开发完成或向应用程序添加新功能时,通常会将其部署在开发暂存环境中。在开发环境中,开发人员执行基本单元测试并查看应用程序的新功能。根据企业的不同,在应用程序最终进入生产阶段之前,还可能有其他几个暂存环境,例如QA(质量保证)沙盒预生产等。每个暂存环境在应用程序生命周期中都有特定的用途。例如,在QA环境中,应用程序经过集成测试和回归测试。在预生产环境中,应用程序经过性能和负载测试。一旦应用程序通过所有这些步骤,它就可以最终部署在生产环境中,让观众可以使用它。这些暂存环境的另一个优点是,开发人员可以在应用程序中启用有用的实用程序和调试功能,而这些功能在生产阶段是不可见的。这有助于发现错误和评估应用程序的性能。

我们可以通过多种方式在 Electron 应用程序中启用这些暂存环境。我们已经知道 Electron 支持全局 NodeJS进程对象,它为我们提供了对环境变量的访问,特别是NODE_ENV我们可以通过进程对象的这个属性来定义登台环境。有关进程对象和NODE_ENV 的更多详细信息。

  • 请参阅文章: ElectronJS 中的进程对象
  • 请参阅文章: ElectronJS 中的热重载

定义暂存环境的另一种方法是使用环境变量,例如ELECTRON_ENV 。 Electron 支持许多环境变量,它们也分为生产开发变量。有关环境变量的更多详细信息。

  • 请参阅文章: ElectronJS 中的环境变量

然而,问题是,并非所有操作系统平台都支持其中一些环境变量。因此,需要有一种方法可以区分适用于所有操作系统平台的不同暂存环境,并且不复杂或不需要更改配置。这可以通过使用electron-is-dev外部npm包来实现。我们将使用这个外部 npm 包来解释 Electron 应用程序中不同暂存环境之间的差异。

我们假设您熟悉上述链接中介绍的先决条件。为了让 Electron 正常工作,需要在系统中预装nodenpm。

  • 项目结构:

项目结构

示例:按照 ElectronJS 中的动态样式中给出的步骤设置基本的 Electron 应用程序。复制文章中提供的main.js文件和index.html文件的样板代码。我们将继续使用相同的代码库构建我们的应用程序。此外,使用 npm安装 electron-is-dev 包。这个包的主要目的是简单地检测 Electron 应用程序是运行开发环境还是生产环境。有关 electron-is-dev 的更多信息,请参阅链接: https ://www.npmjs.com/package/electron-is-dev。

npm install electron-is-dev --save

此外,执行 package.json文件中提到的必要更改以启动电子应用程序。我们将继续使用相同的代码库构建我们的应用程序。设置 Electron 应用程序所需的基本步骤保持不变。
包.json:

{
  "name": "electron-stage",
  "version": "1.0.0",
  "description": "Manage Staging Environments in Electron",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "keywords": [
    "electron"
  ],
  "author": "Radhesh Khanna",
  "license": "ISC",
  "dependencies": {
    "electron": "^8.3.0",
    "electron-is-dev": "^1.2.0"
  }
}

输出:

在 Electron 中管理暂存环境:如上所述,此包仅用于检查 Electron 是否在开发环境中运行。这对于添加调试和实用功能(例如日志记录、使代码通用等)非常有用。这个包可以直接在应用程序的主进程渲染进程中使用。这个包需要 Electron 3+ 才能正常工作。在我们跳入代码之前,我们想对应用程序的 main.js 文件进行某些更改。
main.js文件中,注释掉以下几行:

  • 主要.js:
javascript
Open the DevTools.
win.webContents.openDevTools()


javascript
const electron = require('electron');
// Importing BrowserWindow using Electron Remote 
const BrowserWindow = electron.remote.BrowserWindow;
  
const isDev = require('electron-is-dev');
let win = BrowserWindow.getFocusedWindow();
  
if (isDev) {
    console.log('Running in Development Environment');
    win.webContents.openDevTools();
} else {
    console.log('Running in Production Environment');
}


  • index.js :只有当应用程序在开发模式下运行时,我们才会从渲染器进程(即index.js文件)激活 Chrome DevTools。

javascript

const electron = require('electron');
// Importing BrowserWindow using Electron Remote 
const BrowserWindow = electron.remote.BrowserWindow;
  
const isDev = require('electron-is-dev');
let win = BrowserWindow.getFocusedWindow();
  
if (isDev) {
    console.log('Running in Development Environment');
    win.webContents.openDevTools();
} else {
    console.log('Running in Production Environment');
}

说明:默认情况下,应用程序在开发登台环境中启动。 electron-is-dev npm 包返回一个布尔值,说明应用程序是在开发模式还是生产模式下运行。默认情况下,返回的值为true 。在上面的代码中,我们仅在开发模式下使用BrowserWindow对象的webContents属性的实例方法 openDevTools()激活了 Chome DevTools。
输出:

这里出现的问题是,我们应该如何激活 Electron 应用程序中的生产暂存环境。 Electron-is-dev npm 包应返回falseundefined ,表明应用程序正在生产模式下运行,并且不应在应用程序启动时激活Chrome DevTools 窗口。我们可以使用 ELECTRON_IS_DEV环境变量在不同的环境之间切换。将此环境变量设置为1将切换开发模式,将此环境变量设置为任何其他值(例如0)将在生产模式下启动应用程序。要在生产模式下启动应用程序,请对 package.json文件启动脚本执行以下更改。
包.json:

{
  "name": "electron-stage",
  "version": "1.0.0",
  "description": "Manage Staging Environments in Electron",
  "main": "main.js",
  "scripts": {
    "start": "set ELECTRON_IS_DEV=0 && electron ."
  },
  "keywords": [
    "electron"
  ],
  "author": "Radhesh Khanna",
  "license": "ISC",
  "dependencies": {
    "electron": "^8.3.0",
    "electron-is-dev": "^1.2.0"
  }
}

说明:由于我们在Windows操作系统上,我们无法设置环境变量并从同一命令中启动应用程序。因此,我们需要首先设置ELECTRON_IS_DEV=0 ,然后启动 Electron 应用程序。

注意:如果此环境变量是从 Windows 控制台设置的,则将在重新启动系统时重置,如上例所示。
输出: