createResList.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /**
  2. * 自动生成所有资源列表
  3. */
  4. const path = require('path')
  5. const fs = require('fs')
  6. var FileUtil = require('./FileUtil');
  7. //自动获取项目名称
  8. var programepath = process.cwd();
  9. var arr = programepath.split('\\');
  10. arr = arr.slice(0, arr.length - 1);
  11. var programename = arr[arr.length - 1];
  12. var dirpath = arr.join('\\') + '\\' + programename + '\\assets\\resources';
  13. /** 进入游戏需要加载的资源文件夹 */
  14. var res_list_arr = ['data', 'module/loading', 'module/main', 'module/fight', 'music'];
  15. var resjsondata = {};
  16. var reslistpath = dirpath + "\\data\\resList.json";
  17. //遍历文件夹内所有文件
  18. var mapDir = (dir, callback, finish) => {
  19. fs.readdir(dir, function (err, files) {
  20. if (err) {
  21. console.error(err);
  22. return;
  23. }
  24. files.forEach((filename, index) => {
  25. let pathname = path.join(dir, filename)
  26. fs.stat(pathname, (err, stats) => { // 读取文件信息
  27. if (err) {
  28. console.log('获取文件stats失败');
  29. return;
  30. }
  31. if (stats.isDirectory()) {
  32. mapDir(pathname, callback, finish);
  33. } else if (stats.isFile()) {
  34. if (['.meta'].includes(path.extname(pathname))) { // 排除 目录下的 meta 文件
  35. return;
  36. }
  37. fs.readFile(pathname, (err, data) => {
  38. if (err) {
  39. console.error(err);
  40. return;
  41. }
  42. callback && callback(pathname);
  43. })
  44. }
  45. })
  46. })
  47. })
  48. }
  49. var addFileName = (pathname) => {
  50. let a = pathname.split("\\").slice(arr.length + 3);
  51. if(a.indexOf("prefab_texture") != -1){
  52. return;
  53. }
  54. let vo = {};
  55. let url = a.join("/");
  56. let d = url.split(".");
  57. let type = d[1];
  58. vo.url = d[0];
  59. if(a.indexOf("spine") != -1){
  60. type = 'spine';
  61. }
  62. else if(a.indexOf("atlas") != -1){
  63. type = 'atlas';
  64. }
  65. else if(type == 'png' || type == 'jpg'){
  66. type = 'texture';
  67. }
  68. vo.type = type;
  69. resjsondata[vo.url] = vo;
  70. };
  71. var finish = () => {
  72. };
  73. for (let i = 0; i < res_list_arr.length; i++) {
  74. let p = dirpath + "\\" + res_list_arr[i];
  75. mapDir(p, addFileName, finish);
  76. }
  77. setTimeout(() => {
  78. let res_arr = [];
  79. for (let i in resjsondata) {
  80. res_arr.push(resjsondata[i]);
  81. }
  82. FileUtil.createJson(res_arr, reslistpath);
  83. }, 3000);