quickgame-cli
Version:
quickgame cli
1 lines • 4.72 kB
JavaScript
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault"),_regenerator=_interopRequireDefault(require("@babel/runtime/regenerator")),_slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")),_asyncToGenerator2=_interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")),_toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")),_path=_interopRequireDefault(require("path")),_fsExtra=_interopRequireDefault(require("fs-extra")),_utils=require("../utils"),_transformJs=require("../utils/transformJs"),FILE_INCLUDE_EXT=[".png",".jpg",".jpeg",".gif",".svg",".json",".cer",".obj",".dae",".fbx",".mtl",".stl",".3ds",".mp3",".pvr",".wav",".plist",".ttf",".fnt",".gz",".ccz",".m4a",".mp4",".bmp",".atlas",".swf",".ani",".part",".proto",".bin",".sk",".mipmaps",".txt",".zip",".ogg",".silk",".dbbin",".dbmv",".etc",".lmat",".lm",".ls",".lh",".lani",".lav",".lsani",".ltc",".csv",".scene",".prefab",".lml",".lmani",".ktx",".dds",".xml"],EXCLUDE_FILES=["package.json","package-lock.json","babel.config.js",".eslintrc.js",".eslintignore"],EXCLUDE_DIRS=[".DS_Store","Thumbs.db",".idea","dist","sign","node_modules"];function ResourcePlugin(e){this.options=e}function getCliVersion(){try{var e=_path.default.resolve(__dirname,"../../package.json");return _fsExtra.default.readJsonSync(e).version}catch(e){return _utils.colorconsole.error("获取quickgame-cli版本号失败:",e),"0.0.0"}}function updateManifest(e,r){e.config=e.config||{},e.config.debug=r;var r=e.minPlatformVersion||0,t=(e.quickGameCliVersion=getCliVersion(),1308);return Number(r)<t&&(_utils.colorconsole.warn("新包体minPlatformVersion需>=".concat(t,", rpk中已自动修改为").concat(t)),e.minPlatformVersion="".concat(t)),e.type||(e.type="game"),e}var normalizePath=function(e){return e.replace(/\\/g,"/")};ResourcePlugin.prototype.apply=function(e){var p=this.options,t=e.options,r=p.includeFileExt?p.includeFileExt.split(","):[],r=(FILE_INCLUDE_EXT.push.apply(FILE_INCLUDE_EXT,(0,_toConsumableArray2.default)(r)),p.ignoreDir&&p.ignoreDir.split(",")||[]),f=(EXCLUDE_DIRS=EXCLUDE_DIRS.concat(r),e.hooks.watchRun.tapAsync("ResourcePlugin",function(e,r){Object.keys(t.entry).forEach(function(e){var r=t.entry[e];r instanceof Array&&!/app\.js/.test(e)&&-1!==r[0].indexOf("webpack-dev-server")&&r.shift()}),r()}),e.webpack.sources.RawSource),n=e.webpack.Compilation;e.hooks.thisCompilation.tap("ResourcePlugin",function(c){c.hooks.processAssets.tapAsync({name:"ResourcePlugin",stage:n.PROCESS_ASSETS_STAGE_ADDITIONAL},(()=>{var t=(0,_asyncToGenerator2.default)(_regenerator.default.mark(function e(r,t){var n,i,l,a,s,o,u;return _regenerator.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return n=p.projectPath,i=p.pathBuild,l=c.compiler.inputFileSystem,FILE_INCLUDE_EXT.unshift(".js"),s=(0,_utils.collectResFile)(n,i,FILE_INCLUDE_EXT,EXCLUDE_DIRS,EXCLUDE_FILES),a=(()=>{var t=(0,_asyncToGenerator2.default)(_regenerator.default.mark(function e(r,t){var a,n,s,o;return _regenerator.default.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:if(a=normalizePath(r),n=normalizePath(t),e.prev=2,a.endsWith(".js"))return e.next=6,(0,_transformJs.transformJsAsync)(a);e.next=9;break;case 6:s=e.sent,e.next=12;break;case 9:return e.next=11,new Promise(function(t,n){l.readFile(a,function(e,r){e?n(e):t(r)})});case 11:s=e.sent;case 12:if(o=normalizePath(_path.default.relative(i,n)),n){e.next=15;break}return e.abrupt("return");case 15:c.getAsset(o)?c.updateAsset(o,new f(s),{size:s.length}):c.emitAsset(o,new f(s)),e.next=21;break;case 18:e.prev=18,e.t0=e.catch(2),_utils.colorconsole.log("### App Loader ### 处理文件 ".concat(a," 失败:").concat(e.t0.message));case 21:case"end":return e.stop()}},e,null,[[2,18]])}));return function(e,r){return t.apply(this,arguments)}})(),e.prev=6,e.next=9,Promise.all(Object.entries(s).map(function(e){var e=(0,_slicedToArray2.default)(e,2),r=e[0];return a(e[1],r)}));case 9:s=_path.default.join(n,"manifest.json"),_fsExtra.default.existsSync(s)?(u=_fsExtra.default.readFileSync(s,"utf8"),u=JSON.parse(u),o=!p.sign,u=updateManifest(u,o),u=JSON.stringify(u,null,o?2:0),c.getAsset("manifest.json")?c.updateAsset("manifest.json",new f(u)):c.emitAsset("manifest.json",new f(u))):_utils.colorconsole.error("### App Loader ### 缺少 manifest.json 文件"),_utils.colorconsole.log("### App Loader ### build目录构建完成"),t(),e.next=19;break;case 15:e.prev=15,e.t0=e.catch(6),_utils.colorconsole.error("### App Loader ### 构建失败:",e.t0),t(e.t0);case 19:case"end":return e.stop()}},e,null,[[6,15]])}));return function(e,r){return t.apply(this,arguments)}})())})},module.exports=ResourcePlugin;