很抱歉,誤導大家了。electron隻支援用戶端web項目,package.json裡的scripts字段太誤導人了。讓我傻傻地以為真的可以在裡面寫一個 node server.js呢。辛虧我照着自己寫的部落格重新試了一遍,我發現我之是以能成功是因為我事先已經運作過一次node server.js,electron内部就是一個webkit,有緩存,是以能成功。stackedit緩存太厲害了,隻要你用浏覽器打開過一次,下次就能在浏覽器上繼續使用(即使沒有開啟node服務!)。除非你手動清空緩存。大家要以我為戒,不要在一知半解地情況下碰巧成功了就草草寫部落格,很容易誤導人的!本文是個反面教材,反面教材,反面教材!
如果您不感興趣,直接跳過這一段。
幾年前我上大學那會兒,自學了一下MFC和windows程式設計,當時傻傻地以為要在windows上編寫一個程式給别人用,隻能用MFC呢。然後就去學了,然後畢業就搞Java了。現在回想起來,其實那時候MFC已經沒落了,如今MFC應該是徹底退出曆史舞台了吧。誰要是還在用MFC,請過來打一下我的臉。說實話MFC是個好東西,速度快,編譯出來的exe也非常小。我雖然沒趕上MFC風光的年代,卻也勉強算見證了MFC被淘汰的過程。
之前想找一個C++的IDE。然後找了2款軟體,一個是微軟的VSCode,另一個是Code::Blocks。VSCode啟動速度的确很快,然後有人就說了,微軟一出手,讓你們看看什麼叫專業!然後我試了一下,結論就一個字:垃圾,文檔也爛到家。你用VSCode開發其他的還好,搞C++就算了吧,要麼乖乖的用龐大的VS,要麼用codeblocks吧。如果您不信,盡管去折騰。我一直以為VSCode是用MFC之類的庫寫的呢,直到我在electron官網上看到VSCode後,我更加确信MFC真的淘汰了,就像IE一樣的隐退了——雖然它們曾經是王者。傳統MFC,swing開發桌面程式效率太低。大名鼎鼎的Atom也用了electron,顯然用Web來開發桌面程式已經走上曆史舞台。Java裡的swing也被JavaFx取代(不知道有沒人用這個)。
最近想找一個開源趁手的markdown工具,看到有同僚用的是typora,這個軟體确實挺好,可惜将來要收費的。于是我找到了stackedit這個工具,可惜是web版的,必須要用浏覽器打開,不能alt+tab來切換應用略微不爽。而且本地使用還必須把node服務開起來,就更不爽了。既然這樣何不把stackedit打包成一個exe程式呢,這樣别人也可以友善使用啊。網上搜了一下,打包web程式的主要有兩款工具,一個是node-webkit(現在叫nw),一個是electron。選擇electron是因為社群活躍,而且有成功的例子。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICdzFWRoRXdvN1LclHdpZXYyd2LcBzNvwVZ2x2bzNXak9CX90TQNNkRrFlQKBTSvwFbslmZvwFMwQzLcVmepNHdu9mZvwFVywUNMZTY18CX052bm9CX3VEVWJEaVFldRhlW1VTaitmTzkVdjJjYzpkMMZ3bENGMShUYvwFd4VGdvwlMvw1ayFWbyVGdhd3PyAzNwMTOxgTM2ADOwcTMwIzLcRXZu5ibkN3Yuc2bsJmLn1Wavw1LcpDc0RHaiojIsJye.jpg)
周末花了兩天時間,終于搞定了。看完本文後你也可以輕松打造屬于你自己的桌面應用了。本文就是用自己打包的stackedit.exe寫的。
事實上我是先在csdn上寫的,中間出問題了,加上font标簽後它不給我回車了。有的代碼片段我隻用了2個反引号,不知道是不是跟這樣有關系。
<a href="https://github.com/benweet/stackedit/releases" target="_blank">stackedit release</a>
打開doc檔案夾下的developer-guide.md檔案。看到 Pre-requisites:
[Git][1]
[node.js/npm][2]
[Gulp][3]
[Bower][4]
下載下傳後一路next安裝就可以了。不會使用git也沒關系,這裡隻是讓建構通過。
注意:裝好之後一定要把git的安裝目錄加入到環境變量,否則npm install的時候會報找不到git的錯誤:
新版的node.js自帶了npm(相當于maven的一個東西),直接安裝新版的node.js就好了。如果您不熟悉,直接一路next預設安裝就好了。
注意: 為了您安裝友善,建議您給Nodejs加一個淘寶的鏡像源,網上很多教程這裡不再贅述。
注意:安裝完之後一定要将npm全局包目錄添加到環境變量裡。否則執行bower install時會報沒有權限的錯誤:
npm預設的全局包目錄是:C:\Users\使用者名\AppData\Roaming\npm。把這個添加到環境變量即可。
gulp是一個壓縮工具,可以壓縮.js,.css等檔案。
先安裝到全局
<code>npm install -g gulp</code>
然後安裝到本地,–save表示安裝到目前目錄并且在package.json裡添加依賴。
<code>npm install gulp --save</code>
Bower是一個用戶端技術的軟體包管理器,它可用于搜尋、安裝和解除安裝如JavaScript、HTML、CSS之類的網絡資源。
<code>npm install -g bower</code>
再安裝到本地
<code>npm install bower --save</code>
進入到stackedit
使用npm install -g electron 安裝不了,我們使用淘寶的cnpm
//首先安裝cnpm
<code>npm install -g cnpm --registry=https://registry.npm.taobao.org</code>
//使用cnpm安裝electron,使用方法和npm相同
<code>cnpm install -g electron</code>
據說electron要求必須放在app目錄下,是以我就這樣做了。
package.json
這裡的name就是electron app的名字。
main.js,主要負責建立一個視窗。
scripts就是electron啟動時要執行的腳本,我們這裡是開啟nodejs服務。stackedit是個web項目,不是個靜态的html項目,是以這裡開啟服務至關重要。
main.js
注意:如果這裡寫的是http,那麼
win = new BrowserWindow({width: 1920, height: 1080, webPreferences: {nodeIntegration: false}});
這裡就要加一個nodeIntegration:false,否則,後面打包後頁面不能跳轉!
将之前建構好的stackedit-4.3.14檔案夾拷貝到D:\app目錄下。
先别急着打包,因為打包要相當長的一段時間,而且打包完成之後,會生成很多的檔案夾,層級很多導緻删除不了。血淋淋的教訓啊,是以一定要先測試一下:
如果成功了,開始導出,不成功一定是哪個地方出錯了,修改後再來過。
我們使用electron-packager打包,是以要安裝一下
D:\app是electron的應用所在的目錄,stackedit是這個應用的名字。
注意: 以前指定版本用–version,現在要用–electron-version了。
–out指定打包後輸出目錄,
–icon是給咱們的桌面程式添加一個圖示,不然預設的圖示就是electron的圖示。
注意:electron好像隻支援.ico檔案。我試過了,用.png沒成功。
等待約10分鐘,程式就打包好了。在D:\Mystackedit4\stackedit-win32-x64目錄下會有一個stackedit.exe檔案。
1.管理者身份打開C:\Windows\System32\cmd.exe
2.cd D:\Mystackedit
3.在這個目錄下建立一個aa檔案夾
4.Robocopy /MIR aa stackedit-win32-x64
5.然後就可以删除D:\Mystackedit這個空檔案夾了
1.把stackedit官網的圖檔下載下傳下來,是一個logo.svg檔案
2.線上把logo.svg圖檔轉成logo.png檔案
3.美圖秀秀把logo.png剪裁一下,并且去除背景色(或者叫底色,我也不知道怎麼稱呼,反正背景弄成透明的就行了),生成logo2.png
4.線上把logo2.png轉成ico檔案,生成stackedit.ico。把它放在D盤根目錄下,打包時加上–icon=D:\stackedit.ico。
<a href="https://github.com/semperos/StackEdit-Electron">https://github.com/semperos/StackEdit-Electron</a>