electron-builder,如何设置节点环境变量
electron-builder, how to set node environmental variables
Node.js在windows系统可以在服务器启动前设置环境,像这样:
set NODE_ENV=production
NODE_ENV
参数可以被 process.env.NODE_ENV
在 node.js
或 electron
中使用。
但是当我通过 electron-builder
构建 electron 时,像这样:
electron-builder build --windows
如何设置环境变量?
更新:
可能无法通过 electron-builder
将固定环境变量传递给可执行文件。
可能只能手动加载一个环境文件,打包的时候修改,或者把参数预设成dev
状态。没有状态的时候就是production
.
如果您希望在 运行 时设置环境变量,您可以手动设置它们或使用其他工具,例如 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 下工作方式相同:设置变量然后 运行。
我发布这篇文章是希望它能帮助处于我这种情况的其他人。我有三个环境(开发、暂存和生产),我希望我的 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'));
Node.js在windows系统可以在服务器启动前设置环境,像这样:
set NODE_ENV=production
NODE_ENV
参数可以被 process.env.NODE_ENV
在 node.js
或 electron
中使用。
但是当我通过 electron-builder
构建 electron 时,像这样:
electron-builder build --windows
如何设置环境变量?
更新:
可能无法通过 electron-builder
将固定环境变量传递给可执行文件。
可能只能手动加载一个环境文件,打包的时候修改,或者把参数预设成dev
状态。没有状态的时候就是production
.
如果您希望在 运行 时设置环境变量,您可以手动设置它们或使用其他工具,例如 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 下工作方式相同:设置变量然后 运行。
我发布这篇文章是希望它能帮助处于我这种情况的其他人。我有三个环境(开发、暂存和生产),我希望我的 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'));