Loading

记录编译electerm踩过的坑

最近导师给了个任务,让我改一个ssh工具,首选的有PuTTY和electerm。PuTTY这个软件感觉有点古老,而且是C写的,我就选了electerm

electerm是github上的一个开源项目,基于electron编写,而electron是一个跨平台的开发框架。有了electron我们可以用nodejs来开发桌面应用,大名鼎鼎的vscode就是用electron开发的

之前没接触过nodejs,更别说electron了,作为小白开始一点点摸索。首先在计算机上安装nodejs

安装nodejs

这里使用nvm安装nodejs,nvm是nodejs的版本控制工具。有了nvm,我们可以在计算机上安装并管理多个不同版本的nodejs,可以从github获取Windows版本的nvm安装包进行安装,详细安装配置过程省去

安装完nvm之后,就可以安装nodejs。安装nodejs的最新版14.8.0,另外,npm也会附带安装好。安装完后,配置全局依赖包路径,也就是说多个版本的node可以共用同一个依赖包路径

配置完后安装cnpm,这是淘宝npm镜像,之后就可以用cnpm命令代替npm命令

编译electerm

下载依赖包

从github上下载electerm源代码,用vscode打开。按照github页面上的提示,在命令行内输入cnpm i,表示下载软件需要的依赖包。运行完后,路径内会出现node_modules文件夹,表示依赖包文件

在这一步,一开始就遇到了问题,查看错误提示,大意是python语法错误,原来程序运行还需要python环境,但是本机上安装的是python3,而需要python2,之后就安装python2,进行一系列配置,这一步终于完成

webpack打包

接下来运行cnpm start,表示启动webpack-dev-server对源文件进行打包编译。在这一步又出现了错误,其中一个依赖文件抛出了异常,"[git-rev-sync] no git repository found",意思是找不到git仓库

对于这个错误,我们只要在项目根路径建立git仓库就能解决。最好首先删除下载的依赖包文件夹node_modules,在命令行输入git init建立一个空的git仓库,接着运行git add .git commit -m "init"将本项目提交到仓库中。然后重新运行上一步cnpm i,接着输入cnpm start进行打包,这一步就能完成

启动app

在上一步成功运行后,webpack-dev-server会一直处于运行中,并提示我们

Project is running at http://localhost:XXXX/

一开始我打开浏览器输入了这个地址,结果并没有出现软件界面,F12打开开发者工具,发现报错了

后来在electerm项目页面上才看到要在另一个命令行终端中输入cnpm run app这个命令,而不是直接在浏览器中打开。运行这个命令,就会弹出electerm的软件界面

本以为成功编译并运行了软件,结果在软件界面上弹出了一个错误

Error: The module '\...\electerm-1.4.4\node_modules\_node-pty@0.9.0@node-pty\build\Release\conpty.node' 
was compiled against a different Node.js version using NODE_MODULE_VERSION 72. 
This version of Node.js requires NODE_MODULE_VERSION 80. 
Please try re-compiling or re-installing the module (for instance, using `npm rebuild` or `npm install`). 
at process.func [as dlopen] (electron/js2c/asar.js:140:31) 
at Object.Module._extensions..node (internal/modules/cjs/loader.js:1034:18) 
at Object.func [as .node] (electron/js2c/asar.js:140:31) 
at Module.load (internal/modules/cjs/loader.js:815:32) 
at Module._load (internal/modules/cjs/loader.js:727:14) 
at Function.Module._load (electron/js2c/asar.js:769:28) 
at Module.require (internal/modules/cjs/loader.js:852:19) 
at require (internal/modules/cjs/helpers.js:74:18) 
at new WindowsPtyAgent (\...\electerm-1.4.4\node_modules\_node-pty@0.9.0@node-pty\lib\windowsPtyAgent.js:35:36) 
at new WindowsTerminal (\...\electerm-1.4.4\node_modules\_node-pty@0.9.0@node-pty\lib\windowsTerminal.js:49:24) 
at Object.spawn (\...\electerm-1.4.4\node_modules\_node-pty@0.9.0@node-pty\lib\index.js:28:12) 
at Terminal.localInit (\...\electerm-1.4.4\src\app\server\session.js:135:21) 
at Terminal.init (\...\electerm-1.4.4\src\app\server\session.js:69:36) 
at exports.terminal (\...\electerm-1.4.4\src\app\server\session.js:812:14) 
at \...\electerm-1.4.4\src\app\server\server.js:44:22 
at Layer.handle [as handle_request] (\...\electerm-1.4.4\node_modules\_express@4.17.1@express\lib\router\layer.js:95:5)

意思就是node_pty的NODE_MODULE_VERSION和electron所需要的不一致。查了很多资料,最后看到官方文档上有这个问题的解决方法,对于里面所描述的第一个方法,使用electron rebuild重新编译模块,我试了多次但不起作用。最后还是使用了手动编译的方法

  1. 全局安装node-gyp,cnpm install node-gyp -g,node-gyp就是用来编译模块的
  2. 删除./node_modules/_node-pty@0.9.0@node-pty/build文件夹
  3. 使用命令行进入./node_modules/node-pty,cd .\node_modules\node-pty\
  4. 重新编译node-pty,node-gyp rebuild --target=9.1.2 --arch=x64 --dist-url=https://electronjs.org/headers
  5. 运行cnpm start,启动后在另一个命令行终端上运行cnpm run app
  6. electerm成功运行

原本以为能在一周内编译成功的,结果硬是拖到了一周半,太难了=。=

posted @ 2020-08-19 19:18  Kinopio  阅读(4593)  评论(0编辑  收藏  举报