#項目結構
my-project ├─ .electron-vue(webpack配置文件) │ └─ build.js(生產環境構建代碼)
│ └─ dev-client.js(熱加載相關)
│ └─ dev-runner.js(開發環境啟動入口)
│ └─ webpack.main.config.js(主進程配置文件)
│ └─ webpack.renderer.config.js(渲染進程配置文件)
│ └─ webpack.web.config.js ├─ build(是文件打包使用的) │ └─ win-unpacked/
│ │ ├─ locales(地區語言資源包)
│ │ ├─ resources(地區語言資源包)
│ │ ├─ *.dll(動態鏈接庫) ├─ dist(打包后的文件資源) │ ├─ electron/ ├─ node_modules/(依賴目錄) ├─ src(源碼) │ ├─ main(主進程) │ │ ├─ index.dev.js(捆綁index.js) │ │ └─ index.js(主進程的進程JS) │ ├─ renderer(渲染進程)
│ │ ├─ assets/(放置靜態資源,如圖片,視頻,靜態配置)
│ │ ├─ components/(放置vue頁面) │ │ ├─ router/(放置頁面路由) │ │ ├─ store/(放置公共模塊,如vuex) │ │ ├─ App.vue │ │ └─ main.js │ └─ index.ejs ├─ static/(靜態文件) ├─ test │ ├─ e2e │ │ ├─ specs/ │ │ ├─ index.js │ │ └─ utils.js │ ├─ unit │ │ ├─ specs/ │ │ ├─ index.js │ │ └─ karma.config.js │ └─ .eslintrc
#全局配置文件 ├─ .babelrc ├─ .eslintignore ├─ .eslintrc.js ├─ .gitignore ├─ package.json └─ README.md
#語法規范
require 是 AMD規范引入方式
require是運行時調用,所以require理論上可以運用在代碼的任何地方
require是賦值過程,其實require的結果就是對象、數字、字符串、函數等,再把require的結果賦值給某個變量
import是es6的一個語法標准,如果要兼容瀏覽器的話必須轉化成es5的語法
import是編譯時調用,所以必須放在文件開頭
import是解構過程,但是目前所有的引擎都還沒有實現import,我們在node中使用babel支持ES6,也僅僅是將ES6轉碼為ES5再執行,import語法會被轉碼為require
#模塊功能說明
- electron.app:負責管理Electron 應用程序的生命周期
- electron.BrowserWindow:負責創建窗口
- globalShortcut:模塊可以在操作系統中注冊/注銷全局快捷鍵, 以便可以為操作定制各種快捷鍵
- Menu:創建原生應用菜單和上下文菜單
- ipcMain:當在主進程中使用時,它處理從渲染器進程(網頁)發送出來的異步和同步信息。 從渲染器進程發送的消息將被發送到該模塊
-
Notification:創建OS(操作系統)桌面通知
- fs:在 NodeJS 中,所有與文件操作都是通過 fs 核心模塊來實現的,包括文件目錄的創建、刪除、查詢以及文件的讀取和寫入,在fs 模塊中,所有的方法都分為同步和異步兩種實現,具有
sync
后綴的方法為同步方法,不具有sync
后綴的方法為異步方法 - path:Node.js path 模塊提供了一些用於處理文件路徑的小工具
- screen:檢索有關屏幕大小、顯示器、光標位置等的信息
- shell:提供與桌面集成相關的功能
-
webContents:渲染以及控制 web 頁面
- ffi(Foreign Function Interface):node調用動態鏈接庫(.so/.dll文件),解決NodeJS的本地調用問題,其流程就相當於Windows下的LoadLibrary()和GetProcAddress(),亦可以理解為NodeJS下的平台調用。
- sql.js:sqlite的Webassembly版,使用上和sqlite基本沒有區別,一個開箱即用的sql庫
child_process
:提供了衍生子進程的能力child_process.exec()
: 衍生一個 shell 並在該 shell 中運行命令,當完成時則將stdout
和stderr
傳給回調函數
#變量說明
- __dirname:總是指向被執行 js 文件的絕對路徑
- __filename:獲取當前模塊文件的帶有完整絕對路徑的文件名
#為什么要用dll
- 需要使用系統 API 操作或擴展應用程序;
- 需要調用第三方的接口API,特別是與硬件設備進行通信,而這些接口 API 基本上都是通過 C++ 動態鏈接庫(DLL)實現的;
- 需要調用C++實現的一些復雜算法等。