#项目结构
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.exec(): 衍生一个 shell 并在该 shell 中运行命令,当完成时则将stdout和stderr传给回调函数
#变量说明
__dirname:总是指向被执行 js 文件的绝对路径
__filename:获取当前模块文件的带有完整绝对路径的文件名
#为什么要用dll
需要使用系统 API 操作或扩展应用程序;
需要调用第三方的接口API,特别是与硬件设备进行通信,而这些接口 API 基本上都是通过 C++ 动态链接库(DLL)实现的;
需要调用C++实现的一些复杂算法等。