electron 如何读取软件 package.json 中的名称及版本号
发布于 作者:苏南大叔 来源:程序如此灵动~electron
目标定位是客户端软件,所以,读取程序本身的版本号及名称,这是个刚性需求。除此之外,基于electron
的软件作品,也可以读取其内置的node
、electron
、chrome
的版本号,这些对于程序的辅助debug,也是非常有裨益的。苏南大叔在本文中,主要讲述内容为:如何读取上述内容的版本号。本文涉及的源码的基础代码,来自electron
的quick-start
范例。
读取框架(electron
、node
、chrome
)版本号
大家都知道,electron
的背后实际上是node
和chrome
。所以,我们可以需要读取当前electron
的版本号,以及node
和chrome
的版本号。读取的办法也非常简单,我们利用的electron
的process
对象里面的versions
对象。
在主进程和渲染进程里面,我们都可以访问process.versions
,来获得框架版本信息。
console.log(process.versions);
下面的代码段,来自quick-start
项目里面的渲染进程代码。
We are using Node.js <script>document.write(process.versions.node)</script>,
Chromium <script>document.write(process.versions.chrome)</script>,
and Electron <script>document.write(process.versions.electron)</script>.
process.versions
里面是很多个组件的版本号合集。大家自己看截图即可。
读取软件自身的版本信息
智者千虑,必有一疏。上面的process.versions
居然没有软件自身的版本号信息,这个可能是令大家大跌眼镜的。我们来看一下,electron
(node
)如何读取package.json
里面的内容。代码非常简单,可以在主进程和渲染进程里面使用。
var package = require("./package.json");
console.log(package);
然后我们就可以顺利的拿到写在package.json
里面的name
和version
了,甚至是我们自定义的字段diy
。
var name = package.name;
var version = package.version;
//var diy=package.diy;
下面用截图演示说明代码效果。我们的package.json
文件如下图所示:
在主进程中,使用范例截图如下:
但是在渲染进程里面使用的时候,特别是渲染进程里面有类似jquery
之类的js类库加载的时候,这个require
方法可能是有问题的。其中之一的方案就是修改require
方法名。具体请参照这篇文章:
在下面的截图中,演示的是上面的代码和jquery同时在渲染进程里面出现的情况,请知晓。
适用于加载任何json文件
本方法适用于加载任何json文件,并不单指package.json
文件。比如加载一个自定义的文件config.json
,并且读出里面的配置项目。那么可以这样做:
var config = require("./config.json");
console.log(config);
额外说明
1:require("./package.json")
里面的./
,这个值是路径,表示当前同级目录!你懂的。所以,极端情况下,你可以试试path.join
。比如:
const path = require('path')
console.log(require(path.join(__dirname, 'package.json')));
2:打包之后,根目录下面没有这个package.json
,那是因为放到asar里面去了。对不?你懂的。所以还是能访问到这个文件的。见下图。
结论
苏南大叔说:换个角度考虑问题,往往可以得到一个新的视角和空间,写代码也是这样。package.json
并不是个神话级别的文件,其实它就是个普通json文件罢了,无它。您说是不是呢?
更多electron
的经验文章,请点击这里查看:https://newsn.net/tag/electron/ 。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
请问下苏南大叔 我需要修改json文件的话是只有用fs修改吗 还有其他方法吗?我使用asar压缩后文件就识别不出来 无法修改了
你可以选择把json文件放到asar外面的目录里面