电子生成器,如何设置节点环境变量

Fin*_*inn 13 node.js electron electron-builder

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

set NODE_ENV=production 
Run Code Online (Sandbox Code Playgroud)

NODE_ENV参数可以使用 innode.jselectronby process.env.NODE_ENV

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

electron-builder build --windows
Run Code Online (Sandbox Code Playgroud)

如何设置环境变量?


更新:

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

可能只能手动加载一个环境文件,打包时修改,或者把参数预置到dev状态。当没有状态时,它是production

Sig*_*ier 6

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

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

setlocal
set NODE_ENV=production
.\your-binaries.exe
endlocal
Run Code Online (Sandbox Code Playgroud)

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

单线版本可能是 set NODE_ENV=production && .\binaries.exe

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

  • 它直接在文档中说明。创建一个“ Electron-builder.env ”文件并将变量放入其中。“ Electron-builder.env” 文件应位于文件夹的根目录中,即与“ package.json” 所在的文件夹或“ electron-builder.json” 所在的文件夹(如果您正在使用它)相同。当您使用命令行界面打包应用程序时,这意味着运行“ Electron-builder ”来打包文件而不是将其用作库。但是,它不起作用。如果有人让它工作,请发表评论。 (4认同)

Ror*_*ham 6

我发布此内容是希望它对处于我这种情况的其他人有所帮助。我有三个环境(开发、登台和生产),我希望我的 Electron主进程知道它正在哪个环境上运行。

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

export NODE_ENV=development && electron desktop/main.js
Run Code Online (Sandbox Code Playgroud)

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

const isDev = process.env.NODE_ENV === 'development';
Run Code Online (Sandbox Code Playgroud)

然而,区分临时环境和生产环境有点棘手。我的登台和生产环境都是使用 打包和部署的electron-builderpackage.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",
Run Code Online (Sandbox Code Playgroud)

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

因此,我将环境暴露给 Electron进程以进行登台和生产的解决方案如下:

  1. 通过命令行调用设置NODE_ENV=staging或:NODE_ENV=productionelectron-builder

    "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",
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在我的electron.config.js文件(配置electron-builder)中使用extraMetadata参数(docs)将变量注入我的package.json

    # 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
    
    Run Code Online (Sandbox Code Playgroud)
  3. 然后你可以从你的 Electron 主进程访问它:

    extraMetadata: {
        isProduction: Boolean(process.env.NODE_ENV === 'production'),
    },
    
    Run Code Online (Sandbox Code Playgroud)