layapp

    1.4.6 • Public • Published

    pack_cli

    介绍

    本项目基于laya游戏引擎,请遵循laya官方的建议,在游戏中标注以下内容。

    在游戏加载页或首页的任意可见位置注明:Powered by LayaAir Engine
    

    游戏引擎编写不易,打造生态更难,大家都多多支持laya官方。

    layapp工具QQ交流群:457800610

    打包方面

    依赖json配置,使用命令行来打包 wx,oppo,qq,web等,注意,这里打的包,必需是干净的包,不包含各个平台的相关代码。

    如果想要一份代码打所有的平台的话,必需开发者自己定义好自己的库,可以用来适配所有的平台。

    创建laya项目

    本项目创建的是使用laya作为引擎的空项目。laya(http://layabox.com/)。当前使用的是2.4.0的正式版本。随时更新最新正式版。

    tsconfig中,使用了es6,编译使用了rollup,注意代码编写,最好不要出现循环引用,不然编译会报警告。但是可以编译通过。

    默认使用了fairyGUI作为UI框架,需要使用者安装fairyGUI(https://www.fairygui.com/)。当然,自己爱用什么都可以~

    更新列表

    计划

    • 打包oppo小游戏时,去掉自行安装quickgame-toolkit这一步
    • 打包头条小游戏
    • 打包web游戏

    已完成

    • 创建laya引擎项目. layapp cp myproj [2.4.0],版本为可选项,默认2.4.0,laya引擎正式版本更新后跟着更新,创建了可运行的模板项目
    • wx小游戏打包(默认使用了laya的引擎插件). layapp dev wx or layapp prod wx
    • oppo小游戏打包(需要自行安装quickgame-toolkit<设置好全局变量> 和 openssl(生成好正式签名)). layapp d oppo or layapp p oppo
    • vivo小游戏打包(需要自行安装 openssl(生成好正式签名)). layapp d vivo or layapp p vivo

    安装教程

    1. 安装nodejs v8.9以上 或者 nodejs v10
    2. npm i layapp -g
    3. 在命令提示符中输入:layapp version(如果出现version: x.x.x, 则说明安装成功)

    使用说明

    打包

    1. 在laya的ide中编译完毕,出现bin目录(无论什么方式编译完毕,只要有可运行的bin目录即可)
    2. 在项目中: layapp init [项目名] [平台]
    3. 在打包项目的json中,配置好对应项目的打包配置,如: layapp-projectname-wx.json, layapp-projectname-qq.json
    4. 打包: layapp [dev,prod] [指定的打包配置平台(多个配置的情况下需要,默认不填是wx)] eg: layapp d wx or layapp dev wx,oppo or layapp d all or layapp d
    5. 注意:oppo和vivo打包,没有支持分包,等待后续开发

    配置详情

    打包时需要注意,库文件要在各自的index.js中定义好

    layapp-projectname-wx.json

    {
        "init": {
            "plat": "${PLAT}", /** "web", "qq", "tt", "oppo", ... */
            "templatePath": "", /**不填则调用软件自带的模板*/
            "appid": "wxasfsdfksd123123", /**即微信或者其他平台的appid*/
            "projectName": "${PROJECT_NAME}" /**项目名*/
        },
        "dev": { /**开发版本的配置*/
            "packageOptions": { /**打包的配置选项*/
                "projectBin": "D:/xxxx/", /** 绝对路径 打包时的来源目录,一般是bin目录*/
                "outputPath": "D:/publish/", /** 绝对路径 导出对应的平台项目目录*/
                "resPath": ["res", "resfirst"], /** 资源在bin下的目录名列表,要拷贝到minigame中的,也可以是文件 */
                "resVer": "1.0.0", /**生成cdn资源目录,做资源版本管理用,生成的目录和wxgame同级,为空则直接拷贝res到minigame中 */
                "skipResCheck": true, /** 跳过资源检查,即:不拷贝bin中的素材到指定目录 */
                "skipResHash": true, /**(未实现)跳过资源的hash重命名 */
                "skipCodeUglify": true, /**(未实现)跳过代码压缩*/
                "enginePlugin": true, /** (只实现了插件2.3.0)是否使用引擎插件,当前默认使用插件2.3.0 */
                "es6toes5": false /** (未实现)不推荐使用! 代码是否要把es6转到se5, 因为微信支持ios9,laya引擎如果是2.2以后,且准备支持ios9的,需要true */
            },
            "config": {/** 这个config是具体游戏中需要的配置,wx项目里会挂在window['config']下面 */
                "cdn": "https://xxx.xx.xxx/1.0.0/", /** 注意后面的/ , 这个地方也可以不需要1.0.0, 不过要在项目代码中自定义, (cdn + ver + '/')作为组合 */
                "debug": true, /** 项目中是否显示输出和是否有debug方法 */
                "ver": "1.0.0" /**这个(ver 1.0.0)要和packageOptions中的resVer保持一致*/
            },
            "packageOverScript": "D:/xxx/dev.bat 1.0.0" /** 1.0.0 为参数; 最后不要加pause; 打包完成后是否需要自定义脚本,分包或者git提交的逻辑一般在这里处理 */
        },
        "prod": { /** 正式版本的配置*/
            "packageOptions": {
                "projectBin": "D:/xxxx/",
                "outputPath": "D:/publish/",
                "resPath": ["res", "resfirst"],
                "resVer": "1.0.0",
                "skipResCheck": false,
                "skipResHash": true,
                "skipCodeUglify": false,
                "enginePlugin": true,
                "es6toes5": false
            },
            "config": {
                "cdn": "https://xxx.xx.xxx/1.0.0/",
                "debug": false,
                "ver": "1.0.0"
            },
            "packageOverScript": "D:/xxx/prod.bat"
        }
    }
    
    

    layapp-proj-oppo.json

    {
        "init": {
            "plat": "${PLAT}", /** "web", "qq", "tt", "oppo", ... */
            "templatePath": "", /**不填则调用软件自带的模板*/
            "appid": "", /**即微信或者其他平台的appid*/
            "projectName": "${PROJECT_NAME}" /**项目名*/
        },
        "dev": { /**开发版本的配置*/
            "packageOptions": { /**打包的配置选项*/
                "packageId": "com.xx.xx", /** oppo中的manifest.json中的package的名字定义 */
                "gameName": "游戏名字", /** oppo中的manifest.json中的name的名字定义 */
                "versionName": "1.0.0", /** oppo中的manifest.json中的版本号定义,每次打正式的时候都要修改,测试无所谓 */
                "versionCode": 1, /** oppo中的manifest.json中的版本数字定义,每次打正式的时候都要修改,测试无所谓 */
                "minPlatformVersion": 1050, /** oppo中的manifest.json中的最小平台版本号定义 */
                "iconPath": "D:/xxx/logo.png", /** oppo中的manifest.json中的icon定义 */
                "orientation": "portrait", /** oppo中的manifest.json中的横竖屏定义,value:landscape|portrait */
                "signPath": "", /** oppo中打正式包需要的签名文件的路径,dev模式下可以为空,prod需要填,签名需要自己下载opensll自己生成 */
                "projectBin": "D:/xxxx/", /** 绝对路径 打包时的来源目录,一般是bin目录*/
                "outputPath": "D:/publish/", /** 绝对路径 导出对应的平台项目目录*/
                "resPath": [
                    "res",
                    "resfirst"
                ], /** 资源在bin下的目录名列表,要拷贝到minigame中的 */
                "resVer": "", /**生成cdn资源目录,做资源版本管理用,生成的目录和wxgame同级,为空则直接拷贝res到minigame中 */
                "skipResCheck": false, /** 跳过资源检查,即:不拷贝bin中的素材到指定目录 */
                "skipResHash": true, /**(未实现)跳过资源的hash重命名 */
                "skipCodeUglify": true, /** 跳过代码压缩*/
                "enginePlugin": false, /** (只实现了插件2.3.0)是否使用引擎插件,当前默认使用插件2.3.0 */
                "es6toes5": false /** (未实现)不推荐使用! 代码是否要把es6转到se5, 因为微信支持ios9,laya引擎如果是2.2以后,且准备支持ios9的,需要true */
            },
            "config": { /** 这个config是具体游戏中需要的配置,项目里会直接生成一个config.js文件,挂在window['config']下面 */
                "cdn": "https://xxx.xx.xxx/1.0.0/", /** 注意后面的/ , 这个地方也可以不需要1.0.0, 不过要在项目代码中自定义, (cdn + ver + '/')作为组合 */
                "debug": true, /** 项目中是否显示输出和是否有debug方法 */
                "ver": "1.0.0" /**这个(ver 1.0.0)要和packageOptions中的resVer保持一致*/
            },
            "packageOverScript": "" /** 打包完成后是否需要自定义脚本,分包或者git提交的逻辑一般在这里处理; 注意cmd中不要加pause; 这里的cmd会自动生成oppo_dev.cmd */
        },
        "prod": { /** 正式版本的配置*/
            "packageOptions": {
                "packageId": "com.xx.xx", /** oppo中的manifest.json中的package的名字定义 */
                "gameName": "游戏名字", /** oppo中的manifest.json中的name的名字定义 */
                "versionName": "1.0.0", /** oppo中的manifest.json中的版本号定义,每次打正式的时候都要修改,测试无所谓 */
                "versionCode": 1, /** oppo中的manifest.json中的版本数字定义,每次打正式的时候都要修改,测试无所谓 */
                "minPlatformVersion": 1050, /** oppo中的manifest.json中的最小平台版本号定义 */
                "iconPath": "D:/xxx/logo.png", /** oppo中的manifest.json中的icon定义 */
                "orientation": "portrait", /** oppo中的manifest.json中的横竖屏定义 */
                "signPath": "D:/xxx/sign/release", /** oppo中打正式包需要的签名文件的路径,dev模式下可以为空,prod需要填,签名需要自己下载opensll自己生成 */
                "projectBin": "D:/xxxx/",
                "outputPath": "D:/publish/",
                "resPath": [
                    "res",
                    "resfirst"
                ],
                "resVer": "1.0.0",
                "skipResCheck": false,
                "skipResHash": true,
                "skipCodeUglify": false,
                "enginePlugin": false,
                "es6toes5": false
            },
            "config": {
                "cdn": "https://xxx.xx.xxx/1.0.0/",
                "debug": false,
                "ver": "1.0.0"
            },
            "packageOverScript": ""
        }
    }
    

    打包完毕后,会启动一个服务,弹出网页,扫码即可方便的调试vivo的rpk,重新打包需要先将服务关闭

    layapp-project-vivo.json

    {
        "init": {
            "plat": "${PLAT}", /** "web", "qq", "tt", "vivo", ... */
            "templatePath": "", /**不填则调用软件自带的模板*/
            "appid": "", /**即微信或者其他平台的appid*/
            "projectName": "${PROJECT_NAME}" /**项目名*/
        },
        "dev": { /**开发版本的配置*/
            "packageOptions": { /**打包的配置选项*/
                "packageId": "com.xx.xx.vivominigame", /** vivo中的manifest.json中的package的名字定义 */
                "gameName": "游戏名字", /** vivo中的manifest.json中的name的名字定义 */
                "versionName": "1.0.0", /** vivo中的manifest.json中的版本号定义,每次打正式的时候都要修改,测试无所谓 */
                "versionCode": 1, /** vivo中的manifest.json中的版本数字定义,每次打正式的时候都要修改,测试无所谓 */
                "iconPath": "D:/xxx/logo.png", /** vivo中的manifest.json中的icon定义 */
                "minPlatformVersion": "1056", /** vivo中的最小兼容全量版本,建议在1056之后 */
                "orientation": "portrait", /** vivo中的manifest.json中的横竖屏定义,value:landscape|portrait */
                "signPath": "", /** vivo中打正式包需要的签名文件的路径,dev模式下可以为空,prod需要填,签名需要自己下载opensll自己生成 */
                "thirdEngine": {
                    "laya": "2.4.0"
                },
                "projectBin": "D:/xxxx/", /** 绝对路径 打包时的来源目录,一般是bin目录*/
                "outputPath": "D:/publish/", /** 绝对路径 导出对应的平台项目目录*/
                "resPath": [
                    "res"
                ], /** 资源在bin下的目录名列表,要拷贝到minigame中的 */
                "resVer": "", /**生成cdn资源目录,做资源版本管理用,生成的目录和wxgame同级,为空则直接拷贝res到minigame中 */
                "skipResCheck": false, /** 跳过资源检查,即:不拷贝bin中的素材到指定目录 */
                "skipResHash": true, /**(未实现)跳过资源的hash重命名 */
                "skipCodeUglify": true, /** 跳过代码压缩*/
                "enginePlugin": false, /** (只实现了插件2.3.0)是否使用引擎插件,当前默认使用插件2.3.0 */
                "es6toes5": false /** (未实现)不推荐使用! 代码是否要把es6转到se5, 因为微信支持ios9,laya引擎如果是2.2以后,且准备支持ios9的,需要true */
            },
            "config": { /** 这个config是具体游戏中需要的配置,项目里会直接生成一个config.js文件,挂在window['config']下面 */
                "cdn": "https://xxx.xx.xxx/1.0.0/", /** 注意后面的/ , 这个地方也可以不需要1.0.0, 不过要在项目代码中自定义, (cdn + ver + '/')作为组合 */
                "debug": true, /** 项目中是否显示输出和是否有debug方法 */
                "ver": "1.0.0" /**这个(ver 1.0.0)要和packageOptions中的resVer保持一致*/
            },
            "packageOverScript": "" /** 打包完成后是否需要自定义脚本,分包或者git提交的逻辑一般在这里处理; 注意cmd中不要加pause; 这里的cmd会自动生成vivo_dev.cmd */
        },
        "prod": { /** 正式版本的配置*/
            "packageOptions": {
                "packageId": "com.xx.xx", /** vivo中的manifest.json中的package的名字定义 */
                "gameName": "游戏名字", /** vivo中的manifest.json中的name的名字定义 */
                "versionName": "1.0.0", /** vivo中的manifest.json中的版本号定义,每次打正式的时候都要修改,测试无所谓 */
                "versionCode": 1, /** vivo中的manifest.json中的版本数字定义,每次打正式的时候都要修改,测试无所谓 */
                "iconPath": "D:/xxx/logo.png", /** vivo中的manifest.json中的icon定义 */
                "minPlatformVersion": "1056", /** vivo中的最小兼容全量版本,建议在1056之后 */
                "orientation": "portrait", /** vivo中的manifest.json中的横竖屏定义 */
                "signPath": "D:/xxx/sign/release", /** vivo中打正式包需要的签名文件的路径,dev模式下可以为空,prod需要填,签名需要自己下载opensll自己生成 */
                "thirdEngine": {
                    "laya": "2.4.0"
                },
                "projectBin": "D:/xxxx/",
                "outputPath": "D:/publish/",
                "resPath": [
                    "res"
                ],
                "resVer": "1.0.0",
                "skipResCheck": false,
                "skipResHash": true,
                "skipCodeUglify": false,
                "enginePlugin": false,
                "es6toes5": false
            },
            "config": {
                "cdn": "https://xxx.xx.xxx/1.0.0/",
                "debug": false,
                "ver": "1.0.0"
            },
            "packageOverScript": ""
        }
    }
    

    合并多个json文件到一个js文件(命令虽然还能用,但是xlsx的转变工具已经集成了这个功能了)

    我在xlsx这个工具中,已经集成好了转js的功能,不需要这个了。。。 mjj这个工具,需要使用vscode中插件商店里的: xlsxConvert这个转表插件 或者自己生成的json文件也行,但是必须要有一个_filelist_.json的包含所有需要合并的json名字列表 例如_filelist_.json的内容:

    ["a.json","b.json","c.json",...]
    

    合并后,就是:

    "use strict";
    var tableData = {
    a:{xxx},
    b:{xxx},
    ...
    };
    if (window) {
    window["tableData"] = tableData;
    }
    
    layapp mjj F:/test/jsoncfg.json
    

    jsoncfg.json配置详情

    {
        "plat": "",// 暂时无用
        "projectBasePath": "f:/test",// 这个是合并的基础目录,下面的都是相对目录
        "jsonPath": "./data", // 这个是具体的json文件目录
        "outputUrl": "./tabledata.js",// 这个是合并后的js文件
        "exportName": "tableData"// 这个是window下面挂载的导出json集合的key
    }
    

    创建laya项目(不兼容layaide创建的项目,当然熟悉文件的童鞋可以自己改成兼容)

    创建的laya项目,默认是使用fairyGUI来作为UI框架的。fairyGUI是我使用到目前为止,开发最方便的UI框架了。

    进入到需要创建的目录中,shift+右键,选择打开PowerShell窗口,或者cmd窗口,输入:

    layapp cp project_name
    

    or

    layapp cp project_name 2.4.0
    
    创建项目须知:
    
    1. 安装nodejs v8.9以上 或者 nodejs v10 (判断是否安装,请按组合键:win+r,输入cmd,然后输入node -v,出现版本号即安装好了)
    
    2. 安装layapp工具,在cmd窗口中,输入:npm i layapp -g
    
    3. 判断是否安装完毕layapp,方法是:cmd窗口中,输入:layapp v。出现版本号即安装好了。
    
    4. 在一个你要创建项目的目录中,按住:shift+鼠标右键,选择在此处打开powershell窗口。然后输入:layapp cp project
    
    5. 进入project目录,然后右键client目录,使用vscode打开
    
    6. 打开vscode后,按F5,即可开始调试。如果看到页面上出现开始游戏的按钮,则说明创建一个可以执行的游戏项目的第一步成功了。
    
    第二步
    
    1. 我们做游戏,当然是不能用默认项目里的资源,这里就需要使用到fairygui这个UI制作、编辑软件。
    
    2. 安装fairygui工具。到fairygui官网 https://www.fairygui.com/,下载最新版。
    
    3. 解压fairygui到自己知道的目录,然后进入,打开fairygui.exe,选择打开文件夹。选择自己创建的项目的fguiproject文件夹打开。
    
    10.打开项目后,增加或者修改Home组件中的组件,然后按F9发布
    
    11.回到vscode,按下F5,如果看到页面上出现自己修改的显示,则说明修改已经成功了,恭喜你,第二步你也学会了。
    

    Install

    npm i layapp

    DownloadsWeekly Downloads

    123

    Version

    1.4.6

    License

    ISC

    Unpacked Size

    1.13 MB

    Total Files

    48

    Last publish

    Collaborators

    • wmtiger