精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

我是如何從零學習開發一款跨平臺桌面軟件的

開發 前端
最近一直在學習 Electron 開發桌面應用程序,目的是想做一個桌面編輯器,雖然一直在使用Typore這款神器,但無奈Typore太過國際化,在國內水土不服,無法滿足我的一些需求。

原始沖動

最近一直在學習 Electron 開發桌面應用程序,目的是想做一個桌面編輯器,雖然一直在使用Typore這款神器,但無奈Typore太過國際化,在國內水土不服,無法滿足我的一些需求。

[[283616]]

比如實現本地圖片上傳到云端(mac版可以借助iPic),無法幫我把本地圖片和文章一起發布到博客園、CSDN、SegmentFault、掘金等國內知名博客平臺,要么使用一些免費或付費的圖床,借助類似iPic的工具,把圖片一鍵上傳到云端。

我個人也嘗試過七牛云的免費10G存儲空間,但是說實話,這些免費的空間到最后一定是為了讓你成為付費用戶,各種限制各種吐槽在網上很容易可以搜索到。

免費的圖床如新浪微博等,還算是比較好的圖床工具,相比一些網絡上的壓根不知道啥公司甚至是歸屬個人的免費圖床,新浪應該是比較靠譜的,相對來說可以保證圖片的存活時間,我個人用過一些免費的圖床網站,記得印象深刻的就是服務器出問題,網站掛個公告,曾經的圖片再去訪問就是默認的404。

雖然新浪家大業大不是說倒閉就倒閉的,圖片相對穩定可靠,不過新浪的圖片服務器會檢測訪問來源Referer來防止外部網站引用,造成訪問403。

總結起來就是一句話,圖片還是隨著文章一鍵發布到博客平臺比較好。要丟一起丟~

心理掙扎

緣起這個動機,但是下定決心依舊是困難重重。

我個人是一個Java工程師,雖說搞過Andorid、HTML前端,但對前端深感不適的我果斷放棄了。對于桌面程序開發,我連Swing都不會,造一個Markdown編輯器有點難,何況還要加上這些定制功能。

猶猶豫豫,還是決定去嘗試一下。于是調研寫跨平臺的一些途徑。

先嘗試Swing,不過Swing不好實現我期望的一些功能,改成JavaFX倒是可以,不過說實話,寫起來很累,太過繁瑣,就放棄了。最后把目光瞄向electron,就它了,HTML+Js+Css,聽起來就很簡單,事實證明,無論是測試還是打包都很方便。

決定之后,便開始進行 Electron 的系統學習。

邁出第一步

第一步就是安裝 Electron 的本地開發環境,這也是大多數應用開發的第一步。

你需要安裝 Node.js 在你的本地電腦,Electron 也是依賴于 Node.js 的環境,嚴格來說, Electron 通過將 Chromium 和 Node.js 合并到同一個運行時環境中,并將其打包為Mac,Windows和Linux系統下的應用來實現這一目的。

關于 Electron 的具體開發流程,這里不再贅述,你完全可以在開發中使用Web前端開發的思維,除了在處理多個窗口之間交互的時候,就不得不了解Eelctron的進程機制。

主進程和渲染進程

Electron 運行 package.json 的 main 腳本的進程被稱為主進程。在主進程中運行的腳本通過創建web頁面來展示用戶界面。一個 Electron 應用總是有且只有一個主進程。

由于 Electron 使用了 Chromium 來展示 web 頁面,所以 Chromium 的多進程架構也被使用到。每個 Electron 中的 web 頁面運行在它自己的渲染進程中。

在普通的瀏覽器中,web頁面通常在沙盒環境中運行,并且無法訪問操作系統的原生資源。然而 Electron 的用戶在 Node.js 的 API 支持下可以在頁面中和操作系統進行一些底層交互。

主進程與渲染進程的區別

主進程使用 BrowserWindow 實例創建頁面。每個 BrowserWindow 實例都在自己的渲染進程里運行頁面。當一個 BrowserWindow 實例被銷毀后,相應的渲染進程也會被終止。

主進程管理所有的web頁面和它們對應的渲染進程。每個渲染進程都是獨立的,它只關心它所運行的 web 頁面。

在頁面中調用與 GUI 相關的原生 API 是不被允許的,因為在 web 頁面里操作原生的 GUI 資源是非常危險的,而且容易造成資源泄露。如果你想在 web 頁面里使用 GUI 操作,其對應的渲染進程必須與主進程進行通訊,請求主進程進行相關的 GUI 操作。

主進程與渲染進程通信

那么進程間如何通訊?

Electron為主進程( main process)和渲染器進程(renderer processes)通信提供了多種實現方式,如可以使用ipcRenderer 和 ipcMain模塊發送消息,使用 remote模塊進行RPC方式通信。

你還可以用 Electron 內的 IPC 機制實現。將數據存在主進程的某個全局變量中,然后在多個渲染進程中使用 remote 模塊來訪問它。

  1. // 在主進程中 
  2. global.sharedObject = { 
  3.   someProperty: 'default value' 
  4. // 在第一個頁面中 
  5. require('electron').remote.getGlobal('sharedObject').someProperty = 'new value' 
  6. // 在第二個頁面中 
  7. console.log(require('electron').remote.getGlobal('sharedObject').someProperty) 

使用Electron的API

Electron在主進程和渲染進程中提供了大量API去幫助開發桌面應用程序, 在主進程和渲染進程中,你可以通過require的方式將其包含在模塊中以此,獲取Electron的API

  1. const electron = require('electron'

所有Electron的API都被指派給一種進程類型。許多API只能被用于主進程或渲染進程中,但其中一些API可以同時在上述兩種進程中使用。每一個API的文檔都將聲明你可以在哪種進程中使用該API。

Electron中的窗口是使用BrowserWindow類型創建的一個實例, 它只能在主進程中使用。

  1. // 這樣寫在主進程會有用,但是在渲染進程中會提示'未定義' 
  2. const { BrowserWindow } = require('electron'
  3.  
  4. const win = new BrowserWindow() 

因為進程之間的通信是被允許的, 所以渲染進程可以調用主進程來執行任務。Electron通過remote模塊暴露一些通常只能在主進程中獲取到的API。為了在渲染進程中創建一個BrowserWindow的實例,我們通常使用remote模塊為中間件:

  1. // 這樣寫在渲染進程中時行得通的,但是在主進程中是'未定義' 
  2. const { remote } = require('electron'
  3. const { BrowserWindow } = remote 
  4.  
  5. const win = new BrowserWindow() 

使用Node.js的API

Electron同時在主進程和渲染進程中對Node.js 暴露了所有的接口。這里有兩個重要的定義:

1)所有在Node.js可以使用的API,在Electron中同樣可以使用。在Electron中調用如下代碼是有用的:

  1. const fs = require('fs'
  2.  
  3. const root = fs.readdirSync('/'
  4.  
  5. // 這會打印出磁盤根級別的所有文件 
  6. // 同時包含'/''C:\'。 
  7. console.log(root) 

正如您可能已經猜到的那樣,如果您嘗試加載遠程內容, 這會帶來重要的安全隱患。您可以在我們的 安全文檔 中找到更多有關加載遠程內容的信息和指南。

2)你可以在你的應用程序中使用Node.js的模塊。選擇您最喜歡的 npm 模塊。npm 提供了目前世界上最大的開源代碼庫,那里包含良好的維護、經過測試的代碼,提供給服務器應用程序的特色功能也提供給Electron。

例如,在你的應用程序中要使用官方的AWS SDK,你需要首先安裝它的依賴:

  1. npm install --save aws-sdk 

然后在你的Electron應用中,通過require引入并使用該模塊,就像構建Node.js應用程序那樣:

  1. // 準備好被使用的S3 client模塊 
  2. const S3 = require('aws-sdk/clients/s3'

有一個非常重要的提示: 原生Node.js模塊 (即指,需要編譯源碼過后才能被使用的模塊) 需要在編譯后才能和Electron一起使用。

絕大多數的Node.js模塊都不是原生的, 在650000個模塊中只有400是原生的。當然了,如果你的確需要原生模塊,可以查詢如何重新為Electron編譯原生模塊(很簡單)。

最終產品殺青落地

終于搞明白了 Electron 的應用架構,那么接著就要進入產品的開發階段。比較慶幸的是,ELectron 的UI完全由CSS+HTML組成,這部分可用的框架太多了,我選擇了又老又知名的 BootStarp 框架搭建界面UI,還引用了JS框架JQuery。選擇了 electron-store 作為本地存儲文件,至于最關鍵的Markdown語法解析,對比了一番主流解析框架,最終選擇了 markdown-it。貼一下效果圖:

這款軟件我給他起名為 JustWrite,意思就是現在就寫,也是在督促自己吧,畢竟猶豫徘徊,等于白來。

現在軟件的功能除了包含一鍵發布本地文章加本地圖片到博客園、CSDN、SegmentFault、掘金、開源中國等平臺,我還打算將他打造為一個體驗不錯的Markdown寫作軟件?,F在你閱讀的這篇文章,就是我使用 JustWrite 書寫的,使用的字體是我個人喜歡的幼圓體,除此之外,還有六款風格迥異的字體可以切換使用。字號也是可以動態放大或者縮小,還可以關閉右側預覽,專注于寫作,如下圖所示:

這些截圖是我截屏后使用快捷鍵Ctrl+V一鍵粘貼的,圖片會自動放到當前md文件所在目錄下的picture文件夾內。

關于 JustWrite 從構思到實踐的心路歷程大致就以上這些了,這次開發 JustWrite 也讓我過了一把產品經理的癮,基本已經滿足了我的日常需求。如果你有更好的想法和創意也可以告訴我,說不定第二天就會實現了。

Github:https://github.com/yueshutong/JustWrite

 

責任編輯:武曉燕 來源: 薛勤的博客
相關推薦

2013-05-27 09:47:33

Java開發Java跨平臺

2013-10-31 16:31:19

2021-08-26 05:15:22

圖片編輯器 H5-DooringMitu-Doorin

2022-08-31 08:32:22

數據可視化項目nocode

2021-09-11 21:03:09

可視化搭建框架

2015-08-10 11:41:00

SQL注入SQL注入工具Sqlmapi

2015-07-29 09:15:43

Dukto開源工具

2009-05-11 15:12:03

網管軟件產品摩卡軟件

2018-04-16 16:31:56

前端開發從零開始

2022-04-18 19:02:53

chrome擴展瀏覽器

2021-09-26 16:31:18

滑動驗證碼開發組件設計

2021-09-26 05:00:11

Vscode插件

2014-03-17 15:16:02

移動開發iOS應用

2021-09-28 20:19:54

APKAndroid流程

2015-08-28 08:44:43

web移動開發轉行

2022-05-27 10:00:06

C++游戲引擎

2023-08-22 21:45:05

Warp開源安全文件

2022-02-12 00:00:00

架構

2021-01-18 05:59:21

開發桌面版應用技術熱點

2019-11-11 08:00:00

Doppler遠程監測工具Linux
點贊
收藏

51CTO技術棧公眾號

精品美女视频| av免费不卡国产观看| 美女任你摸久久| 日韩亚洲成人av在线| 欧美又黄又嫩大片a级| 免费污视频在线| 久久综合九色综合欧美就去吻| 国产精品观看在线亚洲人成网| 欧美色视频一区二区三区在线观看| 欧美久久一区二区三区| 欧美日韩综合视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 成人网在线免费观看| 免费一级黄色大片| 国产一区二区精品福利地址| 91精品一区二区三区久久久久久| 日韩a级在线观看| 国产大学生校花援交在线播放 | 国产亚洲欧美在线| 亚洲字幕在线观看| 波多野结衣日韩| 亚洲国产二区| 两个人的视频www国产精品| 欧美熟妇精品黑人巨大一二三区| 亚洲伦理久久| 色妞www精品视频| 国产肉体ⅹxxx137大胆| 久久精品.com| 九一国产在线| av中文字幕在线不卡| 成人黄色影片在线| 丰满熟女人妻一区二区三| 亚洲韩日在线| 色综合久综合久久综合久鬼88 | 亚洲欧美国产中文| 最近高清中文在线字幕在线观看1| 亚洲精品第一国产综合野| 午夜一区二区三视频在线观看| 神马午夜精品95 | 95视频在线观看| 成人在线视频国产| 欧美三级电影在线观看| 蜜臀久久99精品久久久酒店新书| 欧美性video| 亚洲男人天堂一区| 国产免费色视频| 69久久夜色| 日本一区二区高清| 日韩精品欧美一区二区三区| 国产亚洲依依| 久久久国际精品| 欧美最大成人综合网| 日韩av视屏| 久久亚洲综合色| 久久久综合亚洲91久久98| 日韩一区免费视频| 波多野结衣视频一区| 国产一区喷水| 完全免费av在线播放| 欧美日韩老妇| 狠狠色综合色综合网络| 亚洲图片在线综合| 国产亚洲精品精品精品| 国产一区二区三区日韩精品| 国产午夜精品视频免费不卡69堂| 中文字幕一二三四区| 欧美精品第一区| 亚洲一级免费视频| 天堂网av2018| 久久久久久久久久久久久久| 欧美另类极品videosbestfree| 欧美成人国产精品高潮| 亚洲黄色影片| 热久久这里只有精品| 成年人视频免费| 久久99久久精品欧美| 亚洲自拍高清视频网站| 亚洲精品无遮挡| 91婷婷韩国欧美一区二区| 欧美日本亚洲| av女优在线| 亚洲免费电影在线| 青青青免费在线| 国产另类xxxxhd高清| 欧美日韩日日骚| 宇都宫紫苑在线播放| 精品视频在线你懂得| 亚洲欧美日韩视频一区| 国产喷水在线观看| 精品91在线| 国产成人+综合亚洲+天堂| 黄色大全在线观看| 国产99久久久久| 欧美日韩一区二区视频在线| 看黄网站在线观看| 精品久久久久人成| 制服丝袜综合网| 成功精品影院| 中文国产成人精品| 精品在线视频免费| 欧美a一区二区| 国产精品乱码一区二区三区| 岛国最新视频免费在线观看| 亚洲一区免费在线观看| 高清一区在线观看| 国产精品香蕉| 久久色精品视频| 亚洲第一精品区| 中文字幕乱码人妻二区三区| 成人性生交大片免费 | 欧美手机视频| 久久久久亚洲精品| 亚洲综合精品视频| 99精品视频在线播放观看| 在线观看成人一级片| 美女在线视频免费| 日韩一区二区精品在线观看| 少妇精品无码一区二区免费视频| 黄色另类av| 国产精选久久久久久| 视频一区二区三区在线看免费看| 亚洲精品网站在线观看| 国产免费视频传媒| 欧美理伦片在线播放| 欧美成年人网站| 中日精品一色哟哟| 91麻豆.com| 成人毛片一区二区| 日韩在线成人| 久久视频中文字幕| 中文字幕人妻精品一区| 久久久亚洲午夜电影| 777av视频| 香蕉大人久久国产成人av| 日韩在线观看免费全| 国产91精品看黄网站在线观看| 成人av在线观| 成年人午夜免费视频| 97视频一区| 欧美国产极速在线| 精品国产伦一区二区三| 1区2区3区国产精品| 欧美伦理片在线观看| 中文有码一区| 日本免费久久高清视频| 天天av天天翘| 欧美日韩免费一区| 在线观看国产网站| 99成人在线| 精品一区二区三区国产| 高清精品在线| 亚洲精品久久久久久久久久久| 国产乡下妇女做爰毛片| 成人在线视频一区| 成人黄色大片网站| 久久午夜鲁丝片午夜精品| 亚洲欧美高清| 欧美二区三区| 先锋欧美三级| 爱福利视频一区| 国产精品久久久久久久一区二区| 成人免费小视频| 色综合久久久无码中文字幕波多| 欧美人成网站| 国产综合第一页| 欧美亚洲韩国| 日韩在线观看高清| www.久久伊人| 欧美日韩国产一区二区| 欧美做受高潮6| 久久爱www久久做| 日本福利视频导航| 国产精品网在线观看| 热99在线视频| 国内外激情在线| 亚洲风情亚aⅴ在线发布| 精品成人av一区二区在线播放| 久久麻豆一区二区| 婷婷免费在线观看| 欧美精品国产| 欧美日韩一区综合| 先锋影音一区二区| 韩国一区二区电影| 国产黄在线看| 日韩欧美在线影院| 亚洲精品男人的天堂| 国产精品乱码妇女bbbb| 国产精品日日摸夜夜爽| 可以看av的网站久久看| 人人妻人人澡人人爽精品欧美一区| 日韩欧美激情电影| 青青久久av北条麻妃黑人| 色网站免费在线观看| 精品日韩欧美在线| 波多野结衣日韩| 亚洲午夜影视影院在线观看| 国产熟妇久久777777| 国产中文一区二区三区| 国产免费黄视频| 欧美国产小视频| 黄色国产精品一区二区三区| 国产香蕉久久| 538国产精品一区二区在线| 天天在线视频色| 亚洲精品一区在线观看| 真实的国产乱xxxx在线91| 亚洲午夜一区二区三区| 亚洲国产欧美日韩| 四虎影视在线播放| 欧美久久久久久久久久| 免费观看一区二区三区毛片| 亚洲人成7777| 一级黄色录像毛片| 91影院在线观看| 香蕉视频xxxx| 蜜桃精品视频在线观看| 成年人视频观看| 激情丁香综合| 国产对白在线播放| 欧美一区二区性| 麻豆成人小视频| 国产在线播放精品| 亚洲最大av在线| 日韩一级视频| 国产精品久久久久久久美男| 性欧美18xxxhd| 欧美激情国产日韩精品一区18| 日本免费中文字幕在线| 亚洲天堂第二页| 深夜福利免费在线观看| 欧美精品一区二区三区在线| 99精品国产99久久久久久97| 精品视频999| wwwwww在线观看| 欧美视频在线观看 亚洲欧| 国产一级视频在线| 一区二区三区四区高清精品免费观看 | 日韩字幕在线观看| 一区二区三区四区乱视频| 久久精品一区二区三区四区五区| 中文字幕乱码日本亚洲一区二区 | 国际精品欧美精品| 久久久国产精品一区二区三区| 国产suv精品一区二区四区视频| 2019国产精品视频| 国产成人免费视频网站视频社区| 国产精品一区=区| 国产精品99| 国产精品久久久久久久久男 | 午夜在线一区二区| 噜噜噜久久亚洲精品国产品麻豆| 国产精品老牛| 国产黄色特级片| 日韩国产精品91| 男女男精品视频站| 九色|91porny| 欧美又黄又嫩大片a级| 国产一区二区免费视频| 中文字幕1区2区| 北岛玲一区二区三区四区| 午夜剧场免费看| 91麻豆免费在线观看| 日韩人妻一区二区三区| 国产欧美在线观看一区| 国精产品视频一二二区| 日韩毛片高清在线播放| 国产精品 欧美激情| 亚洲一区在线观看网站| 国产成人精品一区二三区| 日韩欧美中文免费| 中文字幕第315页| 91精品久久久久久久91蜜桃| 亚洲精品久久久久久久久久久久久久| 精品99999| 国产一区二区三区福利| 久久精品91久久香蕉加勒比| 欧洲在线视频| 日韩免费在线播放| 四虎影视精品永久在线观看| 99久久精品无码一区二区毛片| 精品久久对白| 日韩和欧美的一区二区| 亚洲天天影视网| 久久黄色片视频| 免费观看30秒视频久久| 麻豆网站免费观看| www成人在线观看| 黑人狂躁日本娇小| 亚洲mv在线观看| 最好看的日本字幕mv视频大全| 欧美一区三区四区| 深夜福利视频一区| 不卡av电影在线观看| 中文不卡1区2区3区| 成人在线精品视频| 偷拍亚洲精品| 在线观看av的网址| 乱人伦精品视频在线观看| 九九久久久久久| 国产欧美一区二区三区鸳鸯浴| 青草影院在线观看| 色琪琪一区二区三区亚洲区| 国产激情久久久久久熟女老人av| 亚洲欧美日韩精品久久亚洲区 | 国产日韩欧美另类| 精品淫伦v久久水蜜桃| 一区高清视频| 老司机一区二区三区| 香蕉在线观看视频| 国产精品久久夜| 最新中文字幕一区| 亚洲精品一线二线三线无人区| 日本电影在线观看网站| 欧美做爰性生交视频| 在线观看视频一区二区三区| 亚洲成人蜜桃| 西西人体一区二区| 美女搡bbb又爽又猛又黄www| 国产精品不卡在线观看| 欧美一区免费看| 日韩电影在线观看永久视频免费网站| mm1313亚洲国产精品美女| 国产精品久久综合av爱欲tv| 欧美调教在线| 欧美久久在线观看| 国产一区二区影院| 国产主播av在线| 欧美专区亚洲专区| 久草在现在线| 热99在线视频| 伊人春色之综合网| 国产精品999视频| av不卡在线播放| 国产网站在线看| 亚洲精品在线三区| 久久青青色综合| 国产成人精品一区二区三区福利| 综合日韩在线| 在线播放国产视频| 一区二区三区在线播放| 不卡av中文字幕| 欧美理论电影在线观看| 精品中文字幕一区二区三区| 国产一二三四五| 国产一区91精品张津瑜| 成人高潮免费视频| 欧美一级黄色录像| 欧美videosex性欧美黑吊| 99九九电视剧免费观看| 在线成人亚洲| 国产伦精品一区二区三区妓女 | 国产色视频在线| 久久综合久久八八| 亚洲成人偷拍| www.99热这里只有精品| 久久综合资源网| 欧美激情一区二区三区免费观看| 中文字幕日韩av电影| 久久久免费人体| av电影一区二区三区| 国产成人免费网站| 久久精品国产亚洲av高清色欲| 亚洲第一国产精品| 国产免费不卡| 亚洲视频电影| 大陆成人av片| 欧美在线观看不卡| 一区二区三区视频免费在线观看| 欧美综合社区国产| 久久久久久久久久伊人| av在线播放成人| 国产免费一区二区三区四区五区| 色吧影院999| 亚洲一区二区三区日本久久九| 日韩黄色短视频| 久久久久久久久久电影| 久草手机在线观看| 一区二区亚洲欧洲国产日韩| 后进极品白嫩翘臀在线播放| 91超碰在线电影| 欧美a级在线| 国产一线在线观看| 亚洲第一激情av| 黄色国产在线| 999视频在线免费观看| 欧美日本一区| 欧美a在线播放| 日韩一区二区免费在线观看| 美女福利一区二区| 亚洲日本精品一区| 国产一区日韩二区欧美三区| 日韩经典在线观看| 中文字幕亚洲综合久久| 日韩视频一二区| 欧美日韩在线一| 国产精品成人一区二区三区夜夜夜| 在线观看日批视频| 欧美亚州一区二区三区| 日韩国产欧美| 魔女鞋交玉足榨精调教|