UNPKG

@hap-toolkit/packager

Version:

@hap-toolkit/packager

3 lines (2 loc) 8.34 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ZipPlugin=ZipPlugin;var _fsExtra=_interopRequireDefault(require("fs-extra")),_path=_interopRequireDefault(require("path")),_sharedUtils=require("@hap-toolkit/shared-utils"),_utils=require("../common/utils"),_info=require("../common/info"),_constant=require("../common/constant"),_index=require("../process/index"),_signature=require("../signature");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function resolveFiles(e,t){let i=(0,_utils.lsdirdeep)(e);return i.includes(_constant.DIGEST_ZIP_PATH)?(console.warning(`检测到存在快应用保留文件: ${_constant.DIGEST_ZIP_PATH}`),!1):(i=(0,_utils.sortFilesBy)(i,t),i)}function getProjectSignConfig(e){const t=e.cwd||_sharedUtils.globalConfig.projectPath,i=e.pathSignFolder||"sign",a={debug:{privatekey:_path.default.join(t,i,"debug/private.pem"),certificate:_path.default.join(t,i,"debug/certificate.pem")},builtinDebug:{privatekey:_path.default.join(_signature.builtinSignFolder,"private.pem"),certificate:_path.default.join(_signature.builtinSignFolder,"certificate.pem")},release:{privatekey:_path.default.join(t,i,"private.pem"),certificate:_path.default.join(t,i,"certificate.pem")},OldRelease:{privatekey:_path.default.join(t,i,"release/private.pem"),certificate:_path.default.join(t,i,"release/certificate.pem")}};let s;switch(e.signMode){case _sharedUtils.compileOptionsMeta.signModeEnum.NULL:_sharedUtils.colorconsole.log("### App Loader ### 项目构建禁用了签名功能"),s=!1;break;case _sharedUtils.compileOptionsMeta.signModeEnum.BUILD:{let{privatekey:e,certificate:t}=a.debug;_fsExtra.default.existsSync(e)&&_fsExtra.default.existsSync(t)?_sharedUtils.colorconsole.log("### App Loader ### 项目构建启用了用户 debug 签名"):(e=a.builtinDebug.privatekey,t=a.builtinDebug.certificate,_sharedUtils.colorconsole.log("### App Loader ### 项目构建启用了内置 debug 签名")),s={privatekey:_fsExtra.default.readFileSync(e),certificate:_fsExtra.default.readFileSync(t)};break}case _sharedUtils.compileOptionsMeta.signModeEnum.RELEASE:{_sharedUtils.colorconsole.log("### App Loader ### 项目构建启用了 release 签名");let{privatekey:e,certificate:t}=a.release;if(!_fsExtra.default.existsSync(e)){if(e=a.OldRelease.privatekey,!_fsExtra.default.existsSync(e))throw new Error(`### App Loader ### 编译错误,缺少release签名私钥文件:${e}`);_sharedUtils.colorconsole.warn('### App Loader ### 后续将使用新release私钥文件地址 "sign/privatekey",请注意更新')}if(!_fsExtra.default.existsSync(t)){if(t=a.OldRelease.certificate,!_fsExtra.default.existsSync(e))throw new Error(`### App Loader ### 编译错误,缺少release签名证书文件:${t}`);_sharedUtils.colorconsole.warn('### App Loader ### 后续将使用新release证书文件地址 "sign/certificate",请注意更新')}s={privatekey:_fsExtra.default.readFileSync(e),certificate:_fsExtra.default.readFileSync(t)};break}default:throw new Error(`### App Loader ### 编译错误,请联系官方开发人员:signMode出错:${e.signMode}`)}return s}function getDistFilename(e,t){var i,a;let s,r;switch(e.signMode===_sharedUtils.compileOptionsMeta.signModeEnum.NULL&&_sharedUtils.colorconsole.log("### App Loader ### 项目构建禁用了签名能力"),e.signMode){case _sharedUtils.compileOptionsMeta.signModeEnum.NULL:s="nosign";break;case _sharedUtils.compileOptionsMeta.signModeEnum.BUILD:s="debug";break;case _sharedUtils.compileOptionsMeta.signModeEnum.RELEASE:s="release";break;default:throw new Error(`### App Loader ### 编译错误,请联系官方开发人员:signMode出错:${e.signMode}`)}let{PACKAGE_NAME:n,PACKAGE_TYPE:o,NODE_ENV:l}=(null===(i=_sharedUtils.globalConfig.launchOptions)||void 0===i||null===(a=i.compileOptions)||void 0===a?void 0:a.defineOptions)||{};const c=[n||e.name,o||s,l,void 0,e.versionName,t];return e.buildNameFormat===_sharedUtils.compileOptionsMeta.buildNameFormat.ORIGINAL?r=`${e.name}.${s}.${t}`:e.buildNameFormat&&e.buildNameFormat.startsWith("CUSTOM=")&&(c[3]=e.buildNameFormat.split("=")[1]),r=r||c.filter(Boolean).join("."),r}function generateDistFile(e,t,i,a){const s=getDistFilename(t,a),r=_path.default.join(t.output,s);_fsExtra.default.writeFileSync(r,e),_sharedUtils.colorconsole.log(`### App Loader ### 项目构建并生成文件:${s}`)}const buildRemotePreviewPkg={cachePkgNameOriginAndPath:[],changeOnMultiDevice(){var e=_fsExtra.default.readdirSync(this.options.pathBuild);for(let t=0;t<e.length;t++){const i=e[t];/manifest(-\w+)?.json/g.test(i)&&this._changePkgName(i)}},_changePkgName(e){const t=_path.default.join(this.options.pathBuild,e),i=_fsExtra.default.readJSONSync(t);if(!i.package)return;const a=i.package;i.package+=".__preview__";const s=i.name,r=this.options.buildPreviewRpkOptions.userNameHash;i.name=r||s,_fsExtra.default.writeFileSync(t,JSON.stringify(i)),this.cachePkgNameOriginAndPath.push({package:a,filePath:t,name:s})},changePkgName(e){this.options=e;try{this.changeOnMultiDevice()}catch(e){console.error(`修改build目录下的包名失败:${e}`)}},resetPkgName(){if(0!==this.cachePkgNameOriginAndPath.length){for(let e=0;e<this.cachePkgNameOriginAndPath.length;e++){const t=this.cachePkgNameOriginAndPath[e].filePath,i=_fsExtra.default.readJSONSync(t);i.package=this.cachePkgNameOriginAndPath[e].package,i.name=this.cachePkgNameOriginAndPath[e].name,_fsExtra.default.writeFileSync(t,JSON.stringify(i))}this.cachePkgNameOriginAndPath=[]}}};function ZipPlugin(e){this.options=Object.assign({priorities:["manifest.json","app.js"]},e),this.manifestFile=_path.default.resolve(this.options.pathSrc,"manifest.json")}ZipPlugin.prototype.apply=function(e){const t=this.options;e.hooks.done.tapAsync("ZipPlugin",(async(i,a)=>{var s;let r,n=[];!t.disableSubpackages&&t.subpackages&&t.subpackages.length>0&&(n=[...t.subpackages]),r=_fsExtra.default.pathExistsSync(_path.default.join(t.pathSrc,"manifest-phone.json"))?_path.default.join(t.pathSrc,"manifest-phone.json"):_path.default.join(t.pathSrc,"manifest.json");let o=!0;if(_fsExtra.default.pathExistsSync(r)){var l,c;const e=_fsExtra.default.readFileSync(r,"utf8"),i=JSON.parse(e);if(t.name=i.package,t.versionName=i.versionName,t.versionCode=i.versionCode,this.options=t,null!=i&&null!==(l=i.router)&&void 0!==l&&l.widgets){var p;const e=(null==i||null===(p=i.router)||void 0===p?void 0:p.widgets)||{};Object.keys(e).forEach((e=>{n.push({name:e.replaceAll("/","."),resource:e,standalone:!0,_widget:!0})}))}Object.keys((null==i||null===(c=i.router)||void 0===c?void 0:c.pages)||{}).length>0&&(o=!1)}try{this.signConfig=getProjectSignConfig(t)}catch(e){return i.compilation.errors.push(e),void a()}if(_sharedUtils.globalConfig.isSmartMode){const e=t.priorities.findIndex((e=>"app.js"===e));t.priorities.splice(e,0,_sharedUtils.compileOptionsMeta.splitChunksNameEnum.APP),t.priorities.splice(e+2,0,_sharedUtils.compileOptionsMeta.splitChunksNameEnum.PAGE)}let d=resolveFiles(t.pathBuild,t.priorities);if("release"===t.sign&&(d=d.filter((e=>!/\.map$/.test(e)))),!1===d||!d.length)return _sharedUtils.colorconsole.error("### App Loader ### build文件缺失,停止生成应用包,请仔细检查"),void a();t.buildPreviewRpkOptions&&t.buildPreviewRpkOptions.setPreviewPkgPath&&(buildRemotePreviewPkg.changePkgName(t),t.name+=".__preview__");const{fullPackage:u,subPackages:g}=(0,_index.createPackagesDefinition)(t.name,n,t.icon,t.comment,t.banner),{_widgetDigestMap:h}=i.compilation;h&&null!==(s=Object.keys(h))&&void 0!==s&&s.length&&console.log("fingerprint:",h),(0,_index.allocateResourceToPackages)(d,t.pathBuild,u,g,t.comment,h),t.buildPreviewRpkOptions&&t.buildPreviewRpkOptions.setPreviewPkgPath&&buildRemotePreviewPkg.resetPkgName();const{rpksBuffer:f,rpkBuffer:_}=await(0,_index.buildProjectAndOutput)(u,g,this.signConfig,t.disableStreamPack,e.watchMode,!t.disableSubpackages&&!o);_fsExtra.default.ensureDirSync(t.output),_&&generateDistFile(_,t,e.watchMode,"rpk"),f&&generateDistFile(f,t,e.watchMode,"rpks"),a()})),e.hooks.watchRun.tapAsync("watch",((e,i)=>{const a=e.modifiedFiles;if(a&&a.has(this.manifestFile))try{const e=(0,_sharedUtils.readJson)(this.manifestFile),i=(0,_info.getSkeletonConfig)(t.pathSrc),a=(0,_utils.genPriorities)(e,i);this.options.priorities=a}catch(e){}i()}))}; //# sourceMappingURL=zip-plugin.js.map