使用 electron-packager 打包时,如何在 Electron 应用程序上设置 NODE_ENV=production?

How do I set NODE_ENV=production on Electron app when packaged with electron-packager?

当使用 electron-packager 打包时,我如何制作我的 Electron 应用程序集 NODE_ENV=production 的打包版本?

您可以通过两种方式进行设置。

通过命令行 --no-prune 参见这里的用法 guide

或以编程方式使用此 API

var packager = require('electron-packager');
var options = {
  'arch': 'ia32',
  'platform': 'win32',
  'dir': './'
  'prune': true //this set the enviroment on production and ignore dev modules
};
packager(options, function done_callback (err, appPaths) { /* … */ })

有关更多选项,请参阅此 guide

2019/12 更新

使用app.isPackagedhttps://electronjs.org/docs/api/app#appispackaged-readonly

如果应用已打包,则 returns 为真,否则为假。假设您只需要检查它是否在生产中,就应该这样做。如果您有不同的 environments/builds 和不同的行为,下面详述的 env 文件解决方案会更合适。


据我所知,您不能在启动时将环境变量传递给打包的电子应用程序(除非您希望您的用户始终从命令行启动它并自己传递)。您始终可以像这样在您的应用程序中设置该环境变量:process.env.NODE_ENV = 'production'。您可以通过在您的构建中设置一个 env 文件来将它与 electron-packager 集成,并且您的应用程序需要它来确定它所处的环境。

例如,有一个如下所示的打包脚本:

"package": "cp env-prod.json src/env.json && npm run build"

并在您的 src/main.js 文件中:

const appEnv = require('./env.json');
console.log(appEnv) //=> { env: "prod", stuff: "hey" }
//you don't really need this, but just in case you're really tied to that NODE_ENV var
if(appEnv.env === 'prod') {
  process.env.NODE_ENV = 'production';
}