我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

electron程序,如何区分是调试模式还是生产模式?这是很多新人会疑惑的问题。苏南大叔的本篇文章,也是从苏南大叔自身的经验角度,来说说这个问题,仅供参考,仅供参考,仅供参考。

苏南大叔:electron程序,如何区分是调试模式还是生产模式? - electron-process-env
electron程序,如何区分是调试模式还是生产模式?(图1-1)

本文测试环境:macelectron@6.0.0。话说,阴阳本为一体,然混沌初开,一分为二,一为阴,一为阳。开发模式或者生产模式,就是一念之间的事情。何必定义的那么清楚,难道生产模式下的程序就不能调试了么?不是。难道开发模式的程序,发布就会发生重大问题么?恐怕也不是的。所以,各位少年,心中有佛所见皆佛,大家淡定淡定。

process.env环境变量(常见)

通过给electron程序添加特殊的启动参数,也就是process.env来区分是否为dev模式,这个是最常见的方式,也是大多数人采用的方式。比如在electron-vue中,就大量使用了这种方案。可以参考下面这篇文章:

代码范例是这样的:

if (process.env.NODE_ENV !== 'production') {
  //debug
}

如何传递参数?(敲黑板重点)

关于这个方案,最常见的新人问题就是:“如何传入env参数?”。一般来说,就是在命令行下面附加参数传递的。比如:

[1] 通用方案:利用cross-env传递参数:

newsn.net:这里是【评论】可见内容

[2] 或者win下专用命令:

set NODE_ENV=production && electron .

[3] 或者mac下专用命令:

NODE_ENV=production electron .
export NODE_ENV=production && electron .

[4] 甚至可以在.js文件里面直接写代码:

process.env.NODE_ENV = 'production'

凡事都没有那么绝对,如果你给最终的生产模式的成品传递一个dev参数标识的话,对于程序来说,又回归到了生产模式逻辑。

app.asar字符判断(可选)

这个方案下,是不是生产模式,其实是以app.asar这个特殊文件是否存在作为主要标准的。这一条是苏南大叔自己总结的,具体可以参见下面这篇文字:

判断标准是:

if (__dirname.split(path.sep).indexOf("app.asar")>=0){
   //production
}

凡事都没有那么绝对,如果一个生产模式的electron程序,在打包的时候,主动关闭了asar参数,那么,这个生产模式的程序,也将被视为调试模式。

app.packed变量判断(推荐)

这个是electron官方提供的方案,但是貌似知道的人很少。这个变量的标准就是:是不是打包了。打包的标准不是asar,而是真正意义上的生成可执行文件。

if (!app.isPackaged) {
  //production
}

相关链接:

其它

这里不排除有其它的方案可以作为判断的标准,苏南大叔在这里就留个空白小结,作为补充的位置进行保留。

结束语

是不是生产模式,就是为了方便程序逻辑判断嘛。所以,如果您思路足够清晰,用什么样的变量或方案,来判断当前是不是调试模式,也不是很难的事情,对吧?

更多electron程序,请点击苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   electron