NodeJS electron-builder,如何设置节点环境变量

m528fe3b  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(447)

Windows中的Node.js环境可以在服务器启动之前设置,如下所示:

set NODE_ENV=production

这个NODE_ENV参数可以在Node.js或electron中由process.env.NODE_ENV使用。
但是当我使用electron-builder构建electron时,就像这样:

electron-builder build --windows

如何设置环境变量?

更新:

可能是我不能通过electron-builder将固定的环境变量传递给可执行文件。
也许你只能手动加载一个环境文件,在打包时修改它,或者将参数预设为dev状态。当没有状态时,它是production

sr4lhrrt

sr4lhrrt1#

如果您希望在运行时设置环境变量,您可以手动设置它们,也可以使用其他工具,如dotenvhttps://www.npmjs.com/package/dotenv
但最简单的方法是在运行二进制文件时设置它们。您可以使用批处理脚本(如果是windows),例如:

setlocal
set NODE_ENV=production
.\your-binaries.exe
endlocal
  • 注意 *:setlocal防止变量进一步泄漏。

一行程序版本可以是set NODE_ENV=production && .\binaries.exe
Linux下的工作方式相同:设置变量,然后运行。

cyej8jka

cyej8jka2#

我张贴这篇文章是希望它能帮助其他处于我这种情况的人。我有三个环境(开发、暂存和生产),我希望我的Electron * 主进程 * 知道它在哪个环境上运行。
现在,对于开发来说,使用CLI将环境变量暴露给Electron内联是非常容易的:

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

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

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

然而,能够区分临时环境和生产环境稍微有点棘手。我的staging和生产环境都是使用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

1.在我的electron.config.js文件(electron-builder的配置)中,使用extraMetadata参数(docs)将变量注入到我的package.json中:

extraMetadata: {
    isProduction: Boolean(process.env.NODE_ENV === 'production'),
},

1.然后你可以从你的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'));

相关问题