模块合并小工具
这两天对seajs模块进行打包合并时,推荐的concat工具不是很好用,不知道是不是我们的使用姿势有问题,无法合并更深层级依赖的模块,所以只能自己写个合并工具来进行transport后的合并:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | /** * @fileoverview * @author Random | http://weibo.com/random * @date 2013-11-27 */ var fs=require( "fs" ); var fileList=[]; var readed={}; var conf = { path : "../build/transport/" , //基础目录,模块文件地址依赖于该目录 src : "_html/demo/index.js" , //入口文件地址 dist : "../build/" //合并生成后的文件存放目录 }; var re= new RegExp( "(\\.[a-z]+)$" , "i" ); function getModuleList(fileStream){ var modules = []; var p = new RegExp( "require\\([\"']([^\\)]+)[\"']\\)" , "img" ); var r = fileStream.match(p); var i; if (r){ i=r.length; while (i--){ r[i].match(p) && modules.push(RegExp.$1); } } return modules; } function getFile(moduleName){ var stream= "" ; var file; !(/\.js$/.test(moduleName)) && (moduleName+= ".js" ); file= conf.path + moduleName; if (fs.existsSync(file)){ stream = fs.readFileSync(file, "utf-8" ); } else { console.log( "file not found:" + file); } return stream; } function find(file){ var fstr; var mds; var i; var realFile; fstr = getFile(file); if (fstr && !readed[file]){ fileList.push(fstr); readed[file] = 1; console.log(file); mds = getModuleList(fstr); if (mds.length){ i = mds.length; while (i--){ find(mds[i]); } } } } function getFileName(){ var name; var arr = conf.src.split( "/" ); var src = arr.pop(); if (src.match(re)){ name = conf.dist + src.replace(re, "-all" +RegExp.$1); } else { name = conf.dist + src + "-all" ; } return name; } find(conf.src); if (fileList.length){ if (!fs.writeFileSync(getFileName(), fileList.join( "\n" ) , "utf-8" )){ console.log( "\nsuccessful" ); } } |
大家可以从 npm 直接安装:
npm install grunt-cmd-combi
该工具可以从入口文件中开始查询所有层级的模块依赖,并最后合并这些文件到最终的大文件中。目前只支持js,而且用正则匹配的模块地址,后续有空再完善吧……
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
2012-11-27 碎片6