electron程序,如何区分是调试模式还是生产模式?
发布于 作者:苏南大叔 来源:程序如此灵动~electron程序,如何区分是调试模式还是生产模式?这是很多新人会疑惑的问题。苏南大叔的本篇文章,也是从苏南大叔自身的经验角度,来说说这个问题,仅供参考,仅供参考,仅供参考。
本文测试环境:mac
、electron@6.0.0
。话说,阴阳本为一体,然混沌初开,一分为二,一为阴,一为阳。开发模式或者生产模式,就是一念之间的事情。何必定义的那么清楚,难道生产模式下的程序就不能调试了么?不是。难道开发模式的程序,发布就会发生重大问题么?恐怕也不是的。所以,各位少年,心中有佛所见皆佛,大家淡定淡定。
process.env
环境变量(常见)
通过给electron
程序添加特殊的启动参数,也就是process.env
来区分是否为dev
模式,这个是最常见的方式,也是大多数人采用的方式。比如在electron-vue
中,就大量使用了这种方案。可以参考下面这篇文章:
代码范例是这样的:
if (process.env.NODE_ENV !== 'production') {
//debug
}
如何传递参数?(敲黑板重点)
关于这个方案,最常见的新人问题就是:“如何传入env参数?”。一般来说,就是在命令行下面附加参数传递的。比如:
[1] 通用方案:利用cross-env
传递参数:
[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
}
相关链接:
- https://newsn.net/say/electron-auto-launch.html
- https://newsn.net/say/electron-second-instance-mac.html
- https://newsn.net/say/electron-fake-protocal-debug.html
其它
这里不排除有其它的方案可以作为判断的标准,苏南大叔在这里就留个空白小结,作为补充的位置进行保留。
结束语
是不是生产模式,就是为了方便程序逻辑判断嘛。所以,如果您思路足够清晰,用什么样的变量或方案,来判断当前是不是调试模式,也不是很难的事情,对吧?
更多electron
程序,请点击苏南大叔的博客:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
66666
拜读
xuexi
6666
爱了
新人报道
11111
1
6666666
6666666
As of Electron 9 we do not allow loading of non-context-aware native modules in the renderer process
666666666666666666
1
666
6666666
新人报道
electron大神electron大神electron大神electron大神electron大神electron大神
electron大神
哇,新人。一直拜读大佬文章。赞赞赞