【问题标题】:electron-builder, how to set node environmental variableselectron-builder,如何设置节点环境变量
【发布时间】:2019-06-10 09:05:42
【问题描述】:

windows系统的node.js可以在服务器启动前设置环境,如下:

set NODE_ENV=production 

NODE_ENV 参数可以在node.jselectron by process.env.NODE_ENV 中使用。

但是当我通过electron-builder 构建电子时,像这样:

electron-builder build --windows

如何设置环境变量?


更新:

可能无法通过electron-builder 将固定的环境变量传递给可执行文件。

也许你只能手动加载一个环境文件,打包时修改,或者将参数预设为dev状态。无状态时为production

【问题讨论】:

    标签: node.js electron electron-builder


    【解决方案1】:

    如果您希望在运行时设置环境变量,您可以手动设置它们或使用其他工具,例如 dotenv https://www.npmjs.com/package/dotenv

    但最简单的方法是在运行二进制文件时在运行时设置它们。例如,您可以使用批处理脚本(如果是 Windows):

    setlocal
    set NODE_ENV=production
    .\your-binaries.exe
    endlocal
    

    注意:setlocal 防止变量进一步泄漏。

    单行版本可以是set NODE_ENV=production && .\binaries.exe

    在 linux 下的工作方式相同:设置变量然后运行。

    【讨论】:

    • “CLI 用法”是什么意思?我在当前目录中创建了一个electron-builder.env 文件并输入NODE_ENV=production 和builder electron,它不起作用。我尝试在electron . 工作以开始和测试节目console.log(process.env.NODE_ENV),它是未定义的。
    • @AlbertChen CLI (en.wikipedia.org/wiki/Command-line_interface) 表示此文件在运行时由命令electron-builder 读取,electron 不会读取。
    • 我尝试通过electron-builder 命令构建电子,如下所示:electron-builder build --windows,但它不起作用。我需要该命令的其他参数吗?
    • @AlbertChen 尝试将其放在源文件的根目录中,例如在文档github.com/motdotla/dotenv-expand/tree/master/test 中用作示例的这个存储库中(参见.env
    • 在文档中直接说明。创建一个electron-builder.env 文件并将变量放入其中。 electron-builder.env 文件应位于文件夹的根目录中,即与 package.json 所在的文件夹或 electron-builder.json 所在的文件夹相同(如果您正在使用它)。当您使用命令行界面打包应用程序时,这意味着运行electron-builder 来打包文件,而不是将其用作库。但是,它不起作用。如果有人让它工作,请发表评论。
    【解决方案2】:

    我发布这个是希望它可以帮助其他人。我有三个环境(开发、登台和生产),我希望我的 Electron 主进程知道它在哪个环境上运行。

    现在,对于开发来说,使用 CLI 向 Electron 内联公开环境变量非常容易:

    export NODE_ENV=development && electron desktop/main.js
    

    然后,Electron 的主进程可以像这样访问这个环境变量:

    const isDev = process.env.NODE_ENV === 'development';
    

    但是,能够区分暂存环境和生产环境有点棘手。我的登台和生产环境都使用electron-builder 打包和部署,package.json 脚本如下:

    "desktop-build": "webpack --config config/webpack/webpack.prod.js && electron-builder --config config/electron.config.js",
    "desktop-build-staging": "webpack --config config/webpack/webpack.staging.js && electron-builder --config config/electron.config.js",
    

    注意:上面的 webpack 配置将配置暴露给渲染器进程(网站),而不是主进程。

    所以我将环境暴露给 Electron main 进程以进行暂存和生产的解决方案如下:

    1. 通过命令行调用将NODE_ENV=stagingNODE_ENV=production 设置为electron-builder

      # Production
      export NODE_ENV=production && webpack --config config/webpack/webpack.prod.js && electron-builder --config config/electron.config.js
      
      # Staging
      export NODE_ENV=staging && webpack --config config/webpack/webpack.staging.js && electron-builder --config config/electron.config.js
      
    2. 在我的electron.config.js 文件(electron-builder 的配置)中,使用extraMetadata 参数(docs)将变量注入我的package.json

      extraMetadata: {
          isProduction: Boolean(process.env.NODE_ENV === 'production'),
      },
      
    3. 然后你可以从你的 Electron 主进程中访问它:

      // This variable is injected into package.json by electron-builder via the extraMetadata field (specified in electron.config.js)
      const {isProduction} = Boolean(require('./package.json'));
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 2023-03-24
      • 1970-01-01
      • 2018-04-21
      • 2019-07-02
      相关资源
      最近更新 更多