Laya 1.x 按文件夹TS代码合并

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
    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 就会一键执行上面所有操作。最后再编辑器中发布即可。

原文地址:https://www.cnblogs.com/chiguozi/p/10158827.html

时间: 2024-10-08 19:41:30

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

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

这里介绍一个Mac系统统计代码行数的工具cloc. 1.首先,安装homebrew,已安装的请跳过. 打开终端工具Terminal,输入下列命令.过程中会让你按RETURN键以及输入mac桌面密码,按照提示进行操作即可: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2.利用homebrew下载并安装cloc. 继续在Terminal中输入: brew

扫描文件夹下代码行数

突发奇想,     想知道项目里有多少行代码.花了一点时间写了个初步的demo,原理很简单,扫描项目src目录,拿到所有的文件按行读取,每读取一行,累计加1. 难      点:    如何跳过目录以及获得目录下的文件和下一级目录,这里用递归比较好. 不足之处:    不支持识别注释,不支持识别代码提交者,不支持时间分类,文件类型分类,不支持总字符统计. 改进方式:   单行注释比较容易,trim一下判断是否以 // 开头,或者用正则匹配一下,多行就有点麻烦了,可能要读取整个文件内容,然后通过正

Android删除文件夹的代码实现

//删除文件夹 private void deleteDirectory(File folder) { if (folder.exists()) { File[] files = folder.listFiles(); if (files == null) { return; } for (int i = 0; i < files.length; i++) { if (files[i].isDirectory()) { deleteDirectory(files[i]); } else { fi

BAT批处理之文件与文件夹操作代码(附xcopy命令详解)

批处理中的文件.文件夹操作,xcopy命令的用法. 一,建bat文件自动执行复制,删除命令. 例1:复制cd.dll文件至windows\system32的bat文件内容: copy cd.dll %windir%\system32 例2:卸载windows\system32目录中的cd.dll,即把上面复制的文件删除: del %windir%\system32\cd.dll 例3:删除download文件夹中的文件,例子如下: del C:\DOWNLOAD\*.* 注意,以处的del命令只

VC删除文件夹操作代码

VS删除文件夹 //功能: 删除非空目录文件夹 //输入: DirName 文件夹名 //输出: 删除是否成功 //功能: 迭代文件夹内文件,一个一个删除 BOOL DeleteDirectory(char *DirName) { CFileFind tempFind; char tempFileFind[200]; sprintf(tempFileFind,"%s\.",DirName); BOOL IsFinded=(BOOL)tempFind.FindFile(tempFileF

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

js var url = canvas.toDataURL();//把canvas中的图片变成data:image C# string filepath = ""; string imgData = Request["url"].ToString(); var date = DateTime.Now.ToString("yyyyMMddmsms"); if (imgData.StartsWith("data:image/png;base

php 删除文件夹的实现代码

php没有一个具体的删除文件夹方法,下面是我自己的一段关于删除文件夹的代码: /** * 删除文件目录 * @param unknown $dir * @return boolean */ function deldir($dir) { //先删除目录下的文件: //chmod($dir,0777); $dh=opendir($dir); while ($file=readdir($dh)) { if($file!="." && $file!=".."

php遍历文件夹及其下所有文件的代码

php实现遍历当前文件夹以及其下所有文件与文件夹的代码,主要是用到了递归,有需要的朋友,可以参考学习下.代码如下:'; function getdir($path) { if(!is_dir($path)) return; $handle = dir($path); while($file=$handle->read()) { if($file!='.' && $file!='..') { $path2 = $path.'/'.$file; if(is_dir($path2)) { 

Qt删除文件夹

写的软件需要进行文件夹的复制,开始不怎么懂就找了个拷贝文件夹的代码测试了一下,运行程序选择了源目录和目标目录相同进行拷贝,结果悲剧了.因为是递归拷贝,导致文件夹被嵌套N层,软件死机,强制结束后,产生的文件夹有N多层,右键删除说文件名太长无法删除.网上找了很多方法都无法清理掉这个嵌套的文件夹,折磨了N久,终于想通,既然是Qt生成的嵌套文件夹,为何不用Qt再写一个删除的程序呢?于是动手查看help,找API函数说明,码代码. //删除文件夹 bool MainWindow::DelDir(const