quickgame-cli
Version:
quickgame cli
1 lines • 6.77 kB
JavaScript
var projectPath,manifestJson,_interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault"),_path=_interopRequireDefault(require("path")),_fs=_interopRequireDefault(require("fs")),_del=_interopRequireDefault(require("del")),_zipPlugin=_interopRequireDefault(require("./plugin/zip-plugin")),_resourcePlugin=_interopRequireDefault(require("./plugin/resource-plugin")),_notifyPlugin=_interopRequireDefault(require("./plugin/notify-plugin")),_utils=require("./utils"),excludeDir=[".DS_Store","Thumbs.db",".idea","build","dist","sign","node_modules"],MAIN_PKG_NAME="base",SUB_PKG_NAME="main",RPKS_SUPPORT_VERSION_FROM=1040,entryFile="main.js";function getEntryFile(e){var t=_path.default.join(e,"game.js"),a=_path.default.join(e,"main.js"),t=_fs.default.existsSync(t),a=_fs.default.existsSync(a);return t&&a?"main.js":t?"game.js":a?"main.js":_utils.colorconsole.throw("项目 ".concat(e," 下找不到入口文件 main.js 或 game.js"))}function checkConfig(e,t,a){_fs.default.existsSync(a)?validateManifest(e,t):_utils.colorconsole.error("项目 ".concat(a," 下找不到入口文件 ").concat(entryFile))}function validateManifest(e,t){t.icon||_utils.colorconsole.error("manifest.json 中未配置图标icon,icon默认尺寸(108x108 桌面图标,正方形)"),t.package||_utils.colorconsole.error("manifest.json 未定义包名(package)"),"string"!=typeof t.versionCode&&_utils.colorconsole.error("manifest.json 配置的 versionCode 必须为字符串类型");t=t.subpackages;!e.disableSubpackages&&t&&1<t.length&&validateManifestSubpackages(t)}function useStrictMode(e){var t,a=_path.default.join(projectPath,"package.json");_fs.default.existsSync(a)?(t=JSON.parse(_fs.default.readFileSync(a)),e?t.babel&&(delete t.babel,_fs.default.writeFileSync(a,JSON.stringify(t,null,"\t")),console.info('编译代码进行严格模式声明:"use strict"')):t.babel||(t.babel={plugins:["babel-plugin-transform-remove-strict-mode"]},_fs.default.writeFileSync(a,JSON.stringify(t,null,"\t")))):console.info("请查看 ".concat(a," 路径下是否存在package.json文件"))}function findUxFilesByManifest(e,t){var a=[],o=(a.push({resource:entryFile}),t.subpackages);return t&&o&&o.forEach(function(e){a.push(e)}),a}function addXiaomiAdapter(e,t){var a;e&&(e=_path.default.join(__dirname,"./utils/xiaomi-adapter.js"),_fs.default.existsSync(e)?_fs.default.copyFileSync(e,_path.default.join(t,"xiaomi-adapter.js")):_utils.colorconsole.throw("xiaomi-adapter.js文件不存在"),e=_path.default.join(t,entryFile),_fs.default.existsSync(e))&&(a=(t=_fs.default.readFileSync(e)).indexOf("require('./engine-adapter');")+"require('./engine-adapter');".length,t=[t.slice(0,a),"\n require('./xiaomi-adapter');",t.slice(a)].join(""),_fs.default.writeFileSync(e,t))}function collectFiles(e,o){var n=_path.default.resolve(projectPath,e),i=new RegExp("(".concat(excludeDir.join("|"),")"));_fs.default.readdirSync(n).forEach(function(e){var t,a;e.match(i)||(t=_path.default.resolve(n,e),(a=_fs.default.statSync(t)).isFile()&&".js"===_path.default.extname(e)&&!e.match(/cocos.*/g)?(t=_path.default.relative(projectPath,t).replace(/\\/,"/"),o.push({resource:t})):a.isDirectory()&&collectFiles(t,o))})}function buildWebpackEntries(e){var n,i={};return e.forEach(function(e){var t,e=e.resource||e.root,a=_path.default.extname(e),o=e.replace(a,"");n=a?(a=e.replace(a,""),_path.default.join(projectPath,a)):(/\.js$/.test(a=e)?a=e:/\/$/.test(e)?(a=e+(t=getEntryFile(_path.default.join(projectPath,e))),o=e+_path.default.basename(t,".js")):_utils.colorconsole.throw("manifest.json中的文件路劲配置存在问题".concat(e)),_path.default.join(projectPath,a)),i[o]=n}),i}function getJson(e){var t;return(t=_fs.default.existsSync(e)?JSON.parse(_fs.default.readFileSync(e)):t)||{}}function validateManifestSubpackages(e){var a,o,n,i,s=[],r=[];e.forEach(function(e,t){a=e.name,o=e.resource||e.root,n=o&&_path.default.join(projectPath,o),i=t+1,a?a===MAIN_PKG_NAME?_utils.colorconsole.throw("第".concat(i,"分包的名字'").concat(a,"'是主包保留名,请修改")):a===SUB_PKG_NAME?_utils.colorconsole.throw("第".concat(i,"分包的名字'").concat(a,"'是分包保留名,请修改")):-1<s.indexOf(a)?_utils.colorconsole.throw("第".concat(i,"分包的名字'").concat(a,"'已存在,请修改")):s.push(a):_utils.colorconsole.throw("第".concat(i,"分包的名字不能为空,请添加")),o?-1<r.indexOf(o)?_utils.colorconsole.throw("第".concat(i,"分包的资源'").concat(o,"'已被使用,请修改")):_fs.default.existsSync(n)||_utils.colorconsole.throw("第".concat(i,"分包的资源'").concat(o,"', 文件目录'").concat(n,"'不存在,请修改")):_utils.colorconsole.throw("第".concat(i,"分包的资源名不能为空,请添加"))});e=manifestJson.minPlatformVersion;parseInt(e)<RPKS_SUPPORT_VERSION_FROM&&_utils.colorconsole.warn("项目已配置分包,若想使用分包功能,请确保平台版本 >= ".concat(RPKS_SUPPORT_VERSION_FROM))}module.exports=function(e,t){var a=2<arguments.length&&void 0!==arguments[2]?arguments[2]:"",o=(projectPath=a||process.cwd(),_path.default.resolve(projectPath,"build")),n=_path.default.resolve(projectPath,"dist"),i=_path.default.resolve(projectPath,"manifest.json"),i={appPackageName:(manifestJson=getJson(i)).package},s=(entryFile=getEntryFile(projectPath),_path.default.join(projectPath,entryFile)),s=(checkConfig(e,manifestJson,s),findUxFilesByManifest(e.cocosWxGame,manifestJson)),s=(addXiaomiAdapter(e.cocosAdapter,projectPath),buildWebpackEntries(s)),r=(e.server||_del.default.sync([n,o]),useStrictMode(e.strictMode),"production"===t),l=r?"release":"debug",c=!r&&"source-map",u=["manifest.json",entryFile],d=e.watch||!1,f=manifestJson.subpackages,t={mode:t,entry:s,output:{path:o,filename:"[name].js"},context:a||_path.default.resolve(__dirname),module:{rules:[]},watch:d,watchOptions:{ignored:/node_modules/},devtool:c,resolve:{modules:["./","node_modules"]},node:{global:!1},resolveLoader:{modules:[_path.default.resolve(__dirname,"./loaders"),"node_modules"]},plugins:[new _zipPlugin.default({name:manifestJson.package,versionCode:manifestJson.versionCode,projectPath:projectPath,output:n,pathBuild:o,sign:l,priorities:u,subpackages:f,copyRpk:e.copyRpk,disableStreamPack:e.disableStreamPack,disableSubpackages:e.disableSubpackages}),new _resourcePlugin.default({pathBuild:o,sign:r,projectPath:projectPath,ignoreDir:e.ignore,cocosWxGame:e.cocosWxGame,includeFileExt:e.includeFileExt})],externals:[function(e,t,a){if(t.match(/@\w+(.\w+)+/g))return a(null,'$require$("@module/'.concat(t.slice(1),'")'));a()}]};return e.jestMode||t.plugins.push(new _notifyPlugin.default),e.cocosWxGame&&t.module.rules.push({parser:{system:!1}},{test:/\.js$/,use:{loader:"resolveRequire"}}),{webpackConf:t,exOptions:i}};