zoukankan      html  css  js  c++  java
  • electron

    electron 打包配置

    配置参数见: https://www.cnblogs.com/mrwh/p/12961446.html

    {
      "name": "TestCustomWeb",
      "version": "1.0.0",
      "main": "index.js",
      "dependencies": {},
      "devDependencies": {
        "css-loader": "^3.6.0",
        "electron": "^7.1.12",
        "electron-builder": "^22.3.2",
        "fast-png": "^5.0.2",
        "style-loader": "^1.2.1",
        "webpack": "^4.41.5",
        "webpack-cli": "^3.3.10"
      },
      "scripts": {
        "start": "electron ."
      },
      "build": {
        "asar": false,
        "extraResources":  [
          {
            "from": "../build/web-desktop/",
            "to": "build/web-desktop"
          },
          {
            "from": "./build/bundle.js",
            "to": "bundle.js"
          }
        ],
        "appId": "com.zqhy.myCode",
        "productName": "TestWeb",
        "mac": {
          "category": "com.zqhy.editor"
        },
        "electronDownload": {
          "mirror": "https://npm.taobao.org/mirrors/electron/"
        },
        "electronVersion": "7.1.12",
        "directories": {
          "output": "appbuild/"
        }
      }
    }
    
    

    客户端使用nodejs模块,路径

    let __DEV__ = false;
    
    if(typeof window === 'object'){
        // client
        window.__DEV__ = __DEV__;
        window.electron = require('electron');
        window.fs = require('fs');
        window.path = require('path');
        window.require = require;
    }else{
        // node
        global.__DEV__ = __DEV__;
    }
    

    关键点:

    1. 通过 DEV 去控制测试和导出时的加载路径.
    2. build->asar 设置成 false,可以比较方便的查看打包后的情况
    3. build->extraResources 可以把资源 copy到打包后 resources 目录下

    几个路径

    let appPath = window.electron.remote.app.getAppPath();
    

    appPath 表示当前应用程序所在目录.
    a. 开发模式下:
    路径为: 启动脚本 index.js 所在的目录.

    b. 打包后:
    路径为: xxxwin-unpacked esourcesapp

    let workDir  = process.cwd();
    

    workDir 表示启动的目录.
    a. 开发模式下:
    路径为: 启动脚本 index.js 所在的目录.

    b. 打包后:
    路径为: XXX.exe 文件所在的目录.

    客户端使用 webpack 和 不使用 webpack

    TODO:

    将cocos creator的 gameCanvas 嵌入到 electron中

    1. 在 cocos creator游戏 assets 同级别目录下 创建 electron 工程
    2. 修改 build-templates/web-desktop/index.html,并使用此模板.
    3. 根据 cocos 的导出结果进行加载.
    require('./client/eui');
    
    
    // 设置app workDir
    let app = window.electron.remote.app;
    let workDir = window.workDir = app.getAppPath();
    console.log('workDir:',workDir);
    
    // cocos打包后目录
    let cocosDir = window.path.join(workDir,'../build/web-desktop');
    
    function async_loadAllJs(lstJs){
        let lstPromise = lstJs.map(js=>{
            return async_loadScript(js);
        });
        return Promise.all(lstPromise);
    }
    
    window.onload = function () {
    
        let lstJs = [];
    
        let path = window.path;
        let fs = window.fs;
    
        // 先加载settings
        let srcDir = path.join(cocosDir,'src');
        let srcFils = fs.readdirSync(srcDir);
        srcFils.forEach(file=>{
            let extname = path.extname(file);
            if (extname === '.js') {
                // 过滤掉 project.dev.7ad19.js
                // 会在 main.js 中去加载
                if(!file.startsWith('project.dev')){
                    lstJs.push(`src/${file}`);
                }
            }
        });
    
        let files = fs.readdirSync(cocosDir);
        files.forEach(file => {
            let extname = path.extname(file);
            if (extname === '.js') {
                lstJs.push(file);
            }
        });
    
        console.log('lstJs:',lstJs);
    
        async_loadAllJs(lstJs).then(()=>{
            console.log('==所有脚本加载成功=====!');
            // 开始启动引擎---------------
            console.log('===========start engine===============');
            window.boot();
        }).catch(()=>{
             console.log('==============加载脚本失败!================');
        });
    };
    
    function async_loadScript(moduleName) {
        return new Promise(function (resolve, reject) {
    
            function scriptLoaded() {
                document.body.removeChild(domScript);
                domScript.removeEventListener('load', scriptLoaded, false);
                resolve();
            }
    
            let domScript = document.createElement('script');
            domScript.async = true;
            domScript.src = moduleName;
            domScript.addEventListener('load', scriptLoaded, false);
            domScript.addEventListener('error',()=>{
                reject();
            },false);
            document.body.appendChild(domScript);
        });
    }
    
    

    主要还是路径问题...

  • 相关阅读:
    Java【第二篇】基本语法之--进制、运算符
    Java【第一篇】基本语法之--关键字、标识符、变量及分类、数据类型及转换
    安装运行zookeeper的坑
    部署java应用的几种方式
    解决sudo用户找不到环境变量的问题
    Python装饰器详解
    filebeat开启自带模块收集日志如何辨别日志来源等
    使用elasticsearch7.3版本在一台主机上部署多个实例组建集群
    redis 集群搭建
    Kibana多用户创建及角色权限控制
  • 原文地址:https://www.cnblogs.com/daihanlong/p/13591386.html
Copyright © 2011-2022 走看看