天天看點

electron打包web項目之stackedit實戰——反面教材引子緣由最終效果本地運作stackedit使用electron打包stackedit題外話

很抱歉,誤導大家了。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是因為社群活躍,而且有成功的例子。

electron打包web項目之stackedit實戰——反面教材引子緣由最終效果本地運作stackedit使用electron打包stackedit題外話
electron打包web項目之stackedit實戰——反面教材引子緣由最終效果本地運作stackedit使用electron打包stackedit題外話
electron打包web項目之stackedit實戰——反面教材引子緣由最終效果本地運作stackedit使用electron打包stackedit題外話

周末花了兩天時間,終于搞定了。看完本文後你也可以輕松打造屬于你自己的桌面應用了。本文就是用自己打包的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>

繼續閱讀