Electron 快速入门及打包

作者: ppCode | 来源:发表于2017-07-26 17:45 被阅读3142次

    初步理解

    简介

    Electron 可以让你使用纯 JavaScript 调用丰富的原生 APIs 来创造桌面应用。你可以把它看作是专注于桌面应用而不是 web 服务器的,io.js 的一个变体。
    这不意味着 Electron 是绑定了 GUI 库的 JavaScript。相反,Electron 使用 web 页面作为它的 GUI,所以你能把它看作成一个被 JavaScript 控制的,精简版的 Chromium 浏览器。

    主进程

    在 Electron 里,运行 package.json 里 main 脚本的进程被称为主进程。在主进程运行的脚本可以以创建 web 页面的形式展示 GUI。

    渲染进程

    由于 Electron 使用 Chromium 来展示页面,所以 Chromium 的多进程结构也被充分利用。每个 Electron 的页面都在运行着自己的进程,这样的进程我们称之为渲染进程。
    在一般浏览器中,网页通常会在沙盒环境下运行,并且不允许访问原生资源。然而,Electron 用户拥有在网页中调用 io.js 的 APIs 的能力,可以与底层操作系统直接交互。

    主进程与渲染进程的区别

    主进程使用 BrowserWindow 实例创建网页。每个 BrowserWindow 实例都在自己的渲染进程里运行着一个网页。当一个 BrowserWindow 实例被销毁后,相应的渲染进程也会被终止。
    主进程管理所有页面和与之对应的渲染进程。每个渲染进程都是相互独立的,并且只关心他们自己的网页。
    由于在网页里管理原生 GUI 资源是非常危险而且容易造成资源泄露,所以在网页面调用 GUI 相关的 APIs 是不被允许的。如果你想在网页里使用 GUI 操作,其对应的渲染进程必须与主进程进行通讯,请求主进程进行相关的 GUI 操作。
    在 Electron,我们提供用于在主进程与渲染进程之间通讯的 ipc 模块。并且也有一个远程进程调用风格的通讯模块 remote

    创建 Electron 应用

    目录结构
    app/
    ├── package.json     //配置声明文件
    ├── main.js          //主进程渲染文件
    ├── renderer.js      //渲染进程文件
    └── index.html       //主入口文件
    
    1.1 创建app目录,在目录中新建index.html及main.js文件(暂时不考虑renderer.js)

    index.html文件示例:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="UTF-8">
        <title>Hello World!</title>
      </head>
      <body>
        <h1>Hello World!</h1>
        <!-- All of the Node.js APIs are available in this renderer process. -->
        We are using Node.js <script>document.write(process.versions.node)</script>,
        Chromium <script>document.write(process.versions.chrome)</script>,
        and Electron <script>document.write(process.versions.electron)</script>.
      </body>
    
      <script>
         //require('./renderer.js')
      </script>
    </html>
    
    

    main.js文件示例:

    // var app = require('app');  // 控制应用生命周期的模块。
    // var BrowserWindow = require('browser-window');  // 创建原生浏览器窗口的模块
    
    const electron = require('electron');
    const app = electron.app;
    const BrowserWindow = electron.BrowserWindow;
    
    // 保持一个对于 window 对象的全局引用,不然,当 JavaScript 被 GC,
    // window 会被自动地关闭
    var mainWindow = null;
    
    // 当所有窗口被关闭了,退出。
    app.on('window-all-closed', function() {
      // 在 OS X 上,通常用户在明确地按下 Cmd + Q 之前
      // 应用会保持活动状态
      if (process.platform != 'darwin') {
        app.quit();
      }
    });
    
    // 当 Electron 完成了初始化并且准备创建浏览器窗口的时候
    // 这个方法就被调用
    app.on('ready', function() {
      // 创建浏览器窗口。
      mainWindow = new BrowserWindow({width: 800, height: 600});
    
      // 加载应用的 index.html
      mainWindow.loadURL('file://' + __dirname + '/index.html');
    
      // 打开开发工具
      mainWindow.openDevTools();
    
      // 当 window 被关闭,这个事件会被发出
      mainWindow.on('closed', function() {
        // 取消引用 window 对象,如果你的应用支持多窗口的话,
        // 通常会把多个 window 对象存放在一个数组里面,
        // 但这次不是。
        mainWindow = null;
      });
    });
    
    1.2 创建配置文件package.json ( npm init -y )

    package.json的格式和 Node 的完全一致,并且那个被 main 字段声明的脚本文件是你的应用的启动脚本,它运行在主进程上。你应用里的 package.json 看起来应该像:

    {
      "name"    : "app",
      "version" : "1.0.1",
      "main"    : "main.js"
    }
    

    运行 Electron 应用

    安装electron-prebuilt运行项目
    npm install electron-prebuilt -save
    
    你只需要按照如下方式直接运行你的应用
    electron .
    

    程序执行成功了...

    22.png

    Electron 应用打包

    #######安装electron-packager

    npm install electron-packager --save-dev
    

    安装后可以在package.json中看到:

    "devDependencies": {
        "electron-packager": "^8.7.2"
    }
    
    打包阶段(有两种方法)
    1.1 直接用命令打包
    electron-packager <location of project> <name of project> <platform> <architecture> <electron version> <optional options>
    

    命令说明:

    • location of project:项目所在路径
    • name of project:打包的项目名字
    • platform:确定了你要构建哪个平台的应用(Windows、Mac 还是 Linux
    • architecture:决定了使用 x86 还是 x64 还是两个架构都用
    • electron version:electron 的版本
    • optional options:可选选项

    命令比较长,每次要是都用这个命令来打包会很烦,可以使用第二种方法;

    1.2 首先在项目根目录下面的 package.json的scripts 下添加代码
    "packager": "electron-packager ./ HelloWorld --all --out ./outApp --version 1.4.0 --overwrite --icon=./app/img/icon/icon.ico"
    
    

    --all 可以换成 --platform=win32 --arch=ia32

    • platform 是发布平台
     - win32指windows平台
     - linux
     - darwin
    
    • arch=ia32 指32位windows 64位的则为x64
    在项目中新建outApp目录
    app/
    ├── package.json   
    ├── node_modules   
    ├── outApp  
    ├── main.js          
    ├── renderer.js      
    └── index.html    
    
    使用命令 npm run-script packager
    npm run-script packager
    

    打包命令执行后,可能会遇到如下问题:

    Packaging app for platform win32 ia32 using electron v1.0.1
    Downloading tmp-1156-0-electron-v1.0.1-win32-x64.zip
    Error: connect ETIMEDOUT 52.216.0.16:443
    connect ETIMEDOUT 52.216.0.16:443

    这时候需要做的是翻墙(打开蓝灯翻墙软件),多执行几次npm run-script packager,就可以成功了

    成功截图如下:

    23.png

    打包成功啦~~

    github源码地址:https://github.com/zky-Luke/electron

    相关文章

      网友评论

      本文标题:Electron 快速入门及打包

      本文链接:https://www.haomeiwen.com/subject/kycokxtx.html