你可以在电子生产中使用 dotenv 吗?

Sco*_*pia 10 reactjs electron electron-builder dotenv

我正在构建一个 Electron、React 应用程序,我需要一个dotenv文件。在代码中,我调用我的变量,process.env.variable这些变量在开发中工作得很好。

然而,一旦与 一起分发electron-builder,则dotenv variables不再起作用 ( undefined)。

我现在的问题是,是否可以做到这一点?如果可以,怎么做?我试图在互联网上找到解决方案,但似乎人们并没有真正面对这个问题。

小智 0

不确定这个问题是否仍然有效,但如果有人有同样的问题,这是我得到的。如果您使用的是electron-builder,目前本机不支持此功能。

ENVS 不会加载到可分发版本中,因为 electro-builder 是一个打包器,而不是捆绑器。ENV 仅在配置打包步骤时加载。(来自 eletron-builder 合作者)

https://github.com/electron-userland/electron-builder/issues/7143

但这并不意味着没有任何其他方法,这是我解决此问题的肮脏方法,我创建了一个脚本来替换用于electron-builder build --publish.

我正在使用 React 样板,它在您所尊重的框架上可能有所不同。因此,我创建了一个脚本来替换 env,当app/dist/main/main.jswebpack 完成将我的 TS 转换为 JS 文件时,它应该在eletron-builderbash 行执行之前。

这是我所做的详细信息:

文件夹结构

app
    scripts(self-created)
          packageEnv.js
    ...

Run Code Online (Sandbox Code Playgroud)

package.json

"scripts": {
    "build": "concurrently \"npm run build:main\" \"npm run build:renderer\"",
    "package:env": "node ./scripts/packageEnv.js",
    "build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts",
    "build:renderer": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.renderer.prod.ts",
    "package": "ts-node ./.erb/scripts/clean.js dist && npm run build && npm run package:env && electron-builder build --publish never",
    "rebuild": "electron-rebuild --parallel --types prod,dev,optional --module-dir release/app",
  },
Run Code Online (Sandbox Code Playgroud)

代码packageEnv.js(它非常脏,我建议阅读并重构它)。TODO也放了一些在那里。

app
    scripts(self-created)
          packageEnv.js
    ...

Run Code Online (Sandbox Code Playgroud)