搜尋
首頁web前端js教程配置|electron+vue+ts+sqlite的配置方法

配置|electron+vue+ts+sqlite的配置方法

Jul 09, 2018 am 11:47 AM
electronsqlitetypescriptvue.js配置

這篇文章主要介紹了關於配置|electron vue ts sqlite的配置方法,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

從程式設計模型的角度來說,使用聲明式語言聲明樣式和佈局,使用功能完整的程式語言編寫業務邏輯,算是GUI程式的一種最好的實踐了。

最近要寫一個個人項目,於是我自然想到要使用前端來寫介面。透過electron就能使用前端技術開發桌面端程式。它其實相當於內嵌了一個webkit瀏覽器核心,只是做了些裁剪和優化。

此外,前端框架使用我所熟悉的vue,無論是介面程式碼或核心程式碼都採用typescript編寫,它的靜態型別系統很強大,綜合了靜態語言和動態語言的優點。

初始化配置

初始化vue和typescrpt

npm install --global @vue/cli
# 2. 创建一个新工程,并选择 "Manually select features (手动选择特性)" 选项
vue create idocumentation

勾選上typescript,其它的按需勾選。

Vue CLI v3.0.0-rc.3
? Please pick a preset: Manually select features
? Check the features needed for your project: Babel, TS, Router, Vuex, Linter
? Use class-style component syntax? No # 是否使用class风格的组件定义
? Use Babel alongside TypeScript for auto-detected polyfills? (Y/n)Yes
? Pick a linter / formatter config: TSLint
? Pick additional lint features: Lint on save
? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? In dedicated config files # 分离配置文件

這樣,vue鷹架就自動幫你初始化好typescript vue專案的架構了,可以進去看一看。

TSLint會對程式碼的格式和規格做檢查,幫你規範格式,同時也會幫助你避免不好的習慣帶來的bug。
不過預設的配置有點嚴格,這可以修改tslint.json來做到,下面是我的配置:

  "rules": {
    "quotemark": [false, "single"],
    "indent": [true, "spaces", 2],
    "interface-name": false,
    "ordered-imports": false,
    "object-literal-sort-keys": false,
    "no-consecutive-blank-lines": false,
    "eofline": false,
    "prefer-const": false,
    "no-console": false,
    "trailing-comma": false,
    "max-classes-per-file": false
  }

如果你覺得某個檢查太嚴了,可以關掉,具體的字段參考這裡:https://palantir.github.io/ts...

安裝配置electron

#首先安裝:

npm install -g electron # 全局安装方式
npm install electron # 本地安装方式 推荐

然後編寫electron主進程的入口程式碼,這裡有個參考,將它放在專案根目錄的main.js中:
https://github.com/electron/ e...

注意到其中有一行:

mainWindow.loadFile('index.html')

這是electron啟動時加載的前端頁面文件,當然,也可以讓electron改為從url加載,就像用瀏覽器開啟一樣:

mainWindow.loadURL('http://localhost:8080');

一般的工作流程是,使用vue的開發伺服器啟動vue的開發伺服器,vue開發伺服器會監聽在8080埠。
該伺服器會監聽檔案系統事件,當修改了專案程式碼後,它會重新編譯、打包。

所以,開發時,讓electron從vue的開發伺服器載入主頁面,則開發起來更方便。

最後在package.json下加入:

"main": "main.js",
// ...
  "scripts": {
    "electron": "node node_modules/electron/cli.js ."
  },

其中,main欄位指定專案的入口文件,也就是剛才寫的main.js

scripts配置的意思是,當在終端運行npm run electron時,會執行:

node node_modules/electron/cli.js .

這段程式碼會

調試

首先,在終端機裡執行:

npm run serve

它會啟動vue的偵錯伺服器,一般監聽的是8080埠。不過,這台伺服器比較智能,如果發現8080被佔用會主動換埠。如果和electron搭配使用時調試的時候要注意這一點。

如果這個時候在瀏覽器打開http://127.0.0.1:8080也能正常訪問,但是最好還是要在electron中調試。因為electron專案可能牽涉到作業系統相關函式庫的呼叫如fs,所以使用瀏覽器是不支援的。

其次,終端機再開一個tab,執行:

npm run electron

如果一切順利,electron的GUI就正常開啟了!

打包配置

但是,上面的配置還有一些問題。我們來看看vue專案的流程:

  1. 首先你寫的vue專案被vue的開發伺服器偵測到

  2. ##開發伺服器會將其編譯、打包

  3. electron訪問vue開發伺服器,拿到網頁和程式碼,類似瀏覽器一樣

  4. 網頁和程式碼在electron環境裡渲染、執行

那麼,如果一個函式庫要想正常使用,需要滿足:

  1. vue的開發伺服器打包時需要將該函式庫打包進來

  2. electron環境中需要支援該庫的運行

然而,預設的vue打包配置是針對瀏覽器的,不會也沒有必要把作業系統相關的函式庫打包進來,如果這時直接呼叫fs等函式庫,會出錯。

解決方案是修改webpack的配置,編輯
vue.config.js,內容為:

module.exports = {
    configureWebpack: {
        target: "electron-renderer"
    }
}
sqlite配置方案

electron專案中引入sqlite真的是一種折磨!啊啊啊啊!配置出了問題,程式碼都沒法寫,寫了也沒辦法運行。

搞了我一整個下午的時間,目前我還沒有完全解決這個問題,如果誰有好的方案請告訴我,謝謝!

問題一

目前引入sqlite會遇到兩個問題。

第一個問題則是sqlite由於是C寫的,安裝時會遇到編譯、連結的問題。
如果直接:

npm i --save sqlite
那麼你引入sqlite包時,一定會報錯。因為electron無法呼叫sqlite的native二進位函式庫。

問題二

即使你解決的了問題一,這還沒完,還有一個更大的問題。

前面說過vue程式碼是需要被webpack編譯、打包的,然而webpack打包並不能打包native模組,像sqlite這種的。

这里提到,这不是bug,这是feature:https://github.com/mapbox/nod...

可能的解决方案

方案一

是不行的!你还需要将sqlite的二进制库文件链接到electron的二进制文件上去,对的,就像你配置C或C++程序那样恐怖。好在有现成的工具,执行:

npm i --save-dev electron-rebuild
./node_modules/.bin/electron-rebuild

它会重新编译链接electron。至于能不能成功,看运气吧。
我在Windows下尝试了下,一会说需要python环境,一会网络链接又不行要下什么预编译包,总之事情很多。

后来在linux环境下尝试了,成功了。之后在electron的主进程里,也就是前面说的main.js入口文件中,尝试了下发现可以使用。

方案二

方案一解决了问题一。那么还有问题二没有解决。
我们梳理下现在手上的问题:

  1. sqlite库能够在electron主进程运行。

  2. sqlite库由于webapck的原因无法在渲染进程中运行。

那么,一种很自然而然的想法是,让实际的sqlite调用在主进程执行,渲染进程通过IPC方式和主进程通信。
如果把这种过程封装起来,即渲染进程中调用某个包装类来调用sqlite3,而包装类会将对应的调用信息通过IPC发送给主进程,主进程真正调用sqlite3模块来完成操作。
这种方式封装了就是远程过程调用(RMI)了,如果需求不高也可以不封装。

方案三

方案三则是用其它的替代思路了。有一个叫做sql.js的库,也能够操作sqlite。
这个库很有意思,它纯粹用js实现的。怎么做到的?性能能好吗?
准确的说不是js。这个库不是手写的代码,它是使用Emscripten将sqlite的C语言实现编译成asm.js。
而asm.js是一个js的严格子集,模型上和C更能对应上去,一旦js引擎发现运行的是asm.js,就跳过语法分析直接转为汇编语言。

但是它有几个缺点:

  1. 只能操作内存中的数据库,无法操作文件系统

  2. 性能和原生实现的sqlite相比,很显然,不高

如果在electorn中要拿它暂时用一用,则需要把数据库完全读入到内存中操作。处理不好,内存会爆炸的。

好在我这里需要用的sqlite只是存存元数据,几十k大小,还是能勉强用用到。先临时用这个顶上,封装一层,写后续的代码。前端和node发展很快,等以后有人弄出easy的解决方案了,再切换回sqlite模块。

方案四

方案四则是看看能不能改下项目的技术选型,要不换个其它的嵌入式数据库?

最后

electron的优点在于大大降低了开发成本,本身前端的方式开发界面就是一种良好的实践的,而前端蓬勃发展的今天又有大量的框架和组件库可供直接调用。
记得大学里写过GTK和Qt的图形界面,对比之下,传统的Qt写界面非常麻烦费事,而且也远远没有前端漂亮,动态性也差一大截。

不过electron的缺点在于打包后体积太大,而且运行性能不高。不过一般的场景中,这点缺点问题不大。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

Vue源码之文件结构与运行机制

ES6 Promise中then与catch的返回值的实例

以上是配置|electron+vue+ts+sqlite的配置方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
從C/C到JavaScript:所有工作方式從C/C到JavaScript:所有工作方式Apr 14, 2025 am 12:05 AM

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)