Laya 1.x 使用TS开发时,经常会碰到代码文件太多,加载index.html时时间太长的问题。Laya编辑器貌似没有自带JS代码合并的功能。基于Laya去实现JS合并需要修改编辑器源码,合并JS并且要修改导出index.html,实现起来比较麻烦,所以考虑合并发布前的TS代码,这样可以正常使用Laya的发布流程,缺点就是修改代码时,需要先恢复源码,修改完再合并,稍微繁琐一点。尽量在稳定后,发布时合并一次即可。

环境配置

  • 工具:gulp、glup-concat、del、gulp-rename
  • 配置步骤:
    1. 进入项目根目录,打开命令行。
    2. 执行npm init初始化npm,根据需要填入对应信息,默认一直点回车即可。
    3. 执行npm install gulp --save-dev 安装gulp
    4. 执行npm install gulp-concat --save-dev 安装gulp-concat插件 用于合并TS代码。
    5. 执行npm install del --save-dev 安装del插件 用来删除文件
    6. 执行npm install gulp-rename --save-dev 安装gulp-rename插件,用于文件改名,如果用不到也可以不安装。
  • 在根目下创建gulpfile.js,用于写工具相关配置。

工具实现:

工作流程:备份src下代码->合并src下代码到src/output下->删除src下源代码->清理bin/js文件->复制导出用index->在编辑器中编译导出。

  • 备份代码实现:

    //备份源代码
    gulp.task('backup', function() {
    return gulp.src(['src/**/*'])
    .pipe(gulp.dest('../backup'));
    });

    将src/的所有文件,复制到../backup文件夹中。

    注意:备份地址不要放在根目录下,否则Laya会去读取这个文件,容易产生多次定义的bug。

    可以在命令行中执行gulp backup 测试脚本执行。之后步骤均可使用这种方式测试单个命令。

  • 合并代码实现:

    合并代码时需要控制文件的合并顺序,防止子类在父类之前定义的问题,这样编译TS时会报错。

    最理想情况是解析导出的index.html按照顺序依次合并,但实现起来比较复杂。这里手动控制父类的文件先合并,其他文件在合并。

    大部分情况下,只有几个文件或者文件夹需要提前处理,工作量并不是很大。只要保证父类在前就可以。

    合并的粒度可以自己控制,可以合成一个文件,也可以按src下文件夹合并,或者更细的粒度。

    //合并frame文件夹
    gulp.task('frame', function() {
    return gulp.src([
    'src/frame/A/**/*.ts', //先合并A文件夹下所有文件
    'src/frame/B/B.ts', //合并B下的B.ts
    'src/frame/C/*Base*.ts', //合并C下所有含有Base的问题
    'src/frame/**/*.ts', //合并frame下的其他所有文件
    ])
    .pipe(concat('frame.ts'))
    .pipe(gulp.dest('src/output'));
    });

    注:如果不是在根目录下执行脚本,如'../src/xxxxx',合并时特殊文件会被多合一次,还没有找到原因。

  • 删除源代码:

    //删除合并前代码
    gulp.task('delsource', function(){
    return del([
    'src/**',
    '!src/output',
    '!src/output/*',
    '!src/ui',
    '!src/ui/*',
    '!src', ], {force:true});
    });

    保留src下的output文件夹和ui文件夹。

    要保留文件夹下的文件,需要先保留文件夹。

  • 删除bin/js

    //删除bin下面js
    gulp.task('cleanBinJs', function(){
    return del([
    'bin/js/**',
    ], {force:true});
    });

    清理之前的js文件

  • 复制发布用index.html

    发布的index和开发的index可能不一样,尤其是在标签中定义文件时。这里是将发布用的index替换到bin下面。

    //拷贝开发index
    gulp.task('copyIndex', function()
    {
    return gulp.src('index/release.html') //找到文件
    .pipe(rename('index.html')) //将文件改名
    .pipe(gulp.dest('./bin/')); //拷贝到bin下面
    })
  • 设置一键脚本

    //打包代码
    gulp.task('merage', gulp.parallel('A', 'B', 'C')); gulp.task('release', gulp.series('backup','merage', 'delsource', 'cleanBinJs', 'copyIndex'));

    ABD为要合并的文件夹。

    只需要在命令行中执行gulp release 就会一键执行上面所有操作。最后再编辑器中发布即可。

Laya 1.x 按文件夹TS代码合并的更多相关文章

  1. 【原】Mac下统计任意文件夹中代码行数的工具——cloc

    这里介绍一个Mac系统统计代码行数的工具cloc. 1.首先,安装homebrew,已安装的请跳过. 打开终端工具Terminal,输入下列命令.过程中会让你按RETURN键以及输入mac桌面密码,按 ...

  2. java压缩指定目录下的所有文件和文件夹的代码

    将代码过程较好的代码段备份一下,下边资料是关于java压缩指定目录下的所有文件和文件夹的代码,希望对码农有帮助. String sourceDir="E:\test";int pa ...

  3. 【原】Mac下统计任意文件夹中代码行数的工

    [链接][原]Mac下统计任意文件夹中代码行数的工http://www.cnblogs.com/wengzilin/p/4580646.html

  4. summernote图片上传功能保存到服务器指定文件夹+php代码+java方法

    1.summernote富文本编辑器 summernote是一款基于bootstrap的富文本编辑器,是一款十分好用的文本编辑器,还附带有图片和文件上传功能. 那么在我们网站中想吧这个图片上传到服务器 ...

  5. OC获取文件(夹)的代码行数

    /* 考察NSString NSArray NSFileManager */ #import <Foundation/Foundation.h> /* 计算单个文件的代码行数 path:文 ...

  6. linux grep find查找文件夹、代码中的某行/字符串

    本文转载于:https://blog.csdn.net/Mr_Cat123/article/details/80541658 在Linux中,由于文件很多,代码很长,可能我们只知道其中的一两个字符串, ...

  7. Java_文件夹分割与合并

    一.思路: 1.文件切割: 使用类RandomAccessFile ,其中方法seek可以自定义读取位置,读一段,通过字节输出流(我使用BufferedOutputStream)写一段 2.文件合并 ...

  8. canvas生成图片并保存到本地文件夹主要代码

    js var url = canvas.toDataURL();//把canvas中的图片变成data:image C# string filepath = ""; string ...

  9. 目前为止最简洁的C#文件夹Copy代码,不接受反驳

    private static void CopyEntireDir(string sourcePath, string destPath) { foreach (string dirPath in D ...

随机推荐

  1. 第一次项目冲刺(Alpha版本)2017/11/17

    一.当天站立式会议 会议内容 1.对数据库的设计的进一步讨论 2.讨论SSH一些配置细节 3.分配今天的任务 二.任务分解图 三.燃尽图 四.心得 刚接触冲刺,一开始任务没有分布很多,大家要一些熟悉的 ...

  2. 利用Intellij IDEA开发Spark程序

    网上例子大多是基于scala的,并且配置基于sbt.scala的eclipse环境超级麻烦,所以下载IDEA. 准备:jdk,IDEA安装(可以不用事先安装sbt和Scala,这在IDEA里都可以pl ...

  3. 加密算法--->对称加密与非对称加密算举例说明

    目前主流的加密方式有:(对称加密)AES.DES        (非对称加密)RSA.DSA 对称加密例子:des对称加密 des对称加密,对称加密,是一种比较传统的加密方式,其加密运算.解密运算使用 ...

  4. 1875: [SDOI2009]HH去散步

    Time Limit: 20 Sec Memory Limit: 64 MB Submit: 2333 Solved: 1204 [Submit][Status][Discuss] Descripti ...

  5. HBase学习之路 (十)HBase表的设计原则

    建表高级属性 下面几个 shell 命令在 hbase 操作中可以起到很大的作用,且主要体现在建表的过程中,看 下面几个 create 属性 1. BLOOMFILTER 默认是 NONE 是否使用布 ...

  6. 私有仓库harbor安装包括https

    1. 下载离线的 harbor gz包 wget https://github.com/vmware/harbor/releases/download/v1.2.0/harbor-offline-in ...

  7. linq to sql 中增删改查

    首先我先说一下,如果真的要用linq做项目的话,也会是比较方便的.已经尝试了在三层架构中应用linq to sql 比较方便. //有三个不同的数据库表,所以写法不一样 public class Li ...

  8. 模糊控制——(4)Sugeno模糊模型

    1.Sugeno模糊模型 传统的模糊系统为Mamdani模糊模型,输出为模糊量. Sugeno模糊模型输出隶属函数为constant或linear,其函数形式为: 它与Mamdani模型的区别在于: ...

  9. jmeter报错之“请在微信客户端打开链接”

    这是一个还没解决的问题,这里纯粹记录自己思考的过程,后续给自己参考. 先说明情景:对微信公众号的一个接口进行调用跑通,后续可能需要压测(是的,仅仅是调通一个接口而已o(╥﹏╥)o) 1.按照我理解的正 ...

  10. 史上最详细的codeblocks安装教程!!!

    codeblocks下载地址:https://www.cnblogs.com/yinbiao/p/8489748.html 下面是codeblocks具体的安装教程: