electron-builder,如何设置节点环境变量
Posted
技术标签:
【中文标题】electron-builder,如何设置节点环境变量【英文标题】:electron-builder, how to set node environmental variables 【发布时间】:2019-06-10 09:05:42 【问题描述】:windows系统的node.js可以在服务器启动前设置环境,如下:
set NODE_ENV=production
NODE_ENV
参数可以在node.js
或electron
by process.env.NODE_ENV
中使用。
但是当我通过electron-builder
构建电子时,像这样:
electron-builder build --windows
如何设置环境变量?
更新:
可能无法通过electron-builder
将固定的环境变量传递给可执行文件。
也许你只能手动加载一个环境文件,打包时修改,或者将参数预设为dev
状态。无状态时为production
。
【问题讨论】:
【参考方案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 进程以进行暂存和生产的解决方案如下:
通过命令行调用将NODE_ENV=staging
或NODE_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
在我的electron.config.js
文件(electron-builder
的配置)中,使用extraMetadata
参数(docs)将变量注入我的package.json
:
extraMetadata:
isProduction: Boolean(process.env.NODE_ENV === 'production'),
,
然后你可以从你的 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'));
【讨论】:
以上是关于electron-builder,如何设置节点环境变量的主要内容,如果未能解决你的问题,请参考以下文章
electron-builder - 只为 mac 构建,但设置为构建 mac 并获胜
当发布设置为始终时,electron-builder 不会在 GitHub 中创建发布,尽管没有错误
如何从 Electron-builder NSIS 获取选定的语言