記錄編譯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成功運行

原本以為能在一周內編譯成功的,結果硬是拖到了一周半,太難了=。=


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM