From 80eceddcd9234248965254c84466517db1b4af21 Mon Sep 17 00:00:00 2001 From: houhaoyu Date: Mon, 6 Jun 2022 10:16:44 +0800 Subject: [PATCH] houhaoyu@huawei.com remove srcEntrance @Entry limit Signed-off-by: houhaoyu Change-Id: I0ae685cc91f4af9e7a6257aeb0ab52ba309c3b88 --- compiler/main.js | 19 ++++++++++++++----- compiler/src/validate_ui_syntax.ts | 5 +++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/compiler/main.js b/compiler/main.js index 8e9d8cb..e619212 100644 --- a/compiler/main.js +++ b/compiler/main.js @@ -44,6 +44,7 @@ const resources = { app: {}, sys: {} }; +const abilityPagesFullPath = []; function initProjectConfig(projectConfig) { projectConfig.entryObj = {}; @@ -157,7 +158,7 @@ function setAbilityPages(projectConfig) { let abilityPages = []; if (projectConfig.aceModuleJsonPath && fs.existsSync(projectConfig.aceModuleJsonPath)) { const moduleJson = JSON.parse(fs.readFileSync(projectConfig.aceModuleJsonPath).toString()); - abilityPages = readAbilityEntrance(moduleJson); + abilityPages = readAbilityEntrance(moduleJson, projectConfig); setAbilityFile(projectConfig, abilityPages); setBundleModuleInfo(projectConfig, moduleJson); } @@ -220,27 +221,34 @@ function setAbilityFile(projectConfig, abilityPages) { }); } -function readAbilityEntrance(moduleJson) { +function readAbilityEntrance(moduleJson, projectConfig) { let abilityPages = []; if (moduleJson.module) { if (moduleJson.module.srcEntrance) { abilityPages.push(moduleJson.module.srcEntrance); } if (moduleJson.module.abilities && moduleJson.module.abilities.length > 0) { - setEntrance(moduleJson.module.abilities, abilityPages); + setEntrance(moduleJson.module.abilities, abilityPages, projectConfig); } if (moduleJson.module.extensionAbilities && moduleJson.module.extensionAbilities.length > 0) { - setEntrance(moduleJson.module.extensionAbilities, abilityPages); + setEntrance(moduleJson.module.extensionAbilities, abilityPages, projectConfig); } } return abilityPages; } -function setEntrance(abilityConfig, abilityPages) { +function setEntrance(abilityConfig, abilityPages, projectConfig) { if (abilityConfig && abilityConfig.length > 0) { abilityConfig.forEach(ability => { if (ability.srcEntrance) { abilityPages.push(ability.srcEntrance); + let finalPath = path.resolve(path.resolve(projectConfig.projectPath, '../'), ability.srcEntrance); + finalPath = finalPath.replace(/\\/g, '/'); + if (fs.existsSync(finalPath)) { + abilityPagesFullPath.push(finalPath); + } else { + abilityPagesFullPath.push(ability.srcEntrance); + } } }); } @@ -350,3 +358,4 @@ exports.resources = resources; exports.loadWorker = loadWorker; exports.abilityConfig = abilityConfig; exports.readWorkerFile = readWorkerFile; +exports.abilityPagesFullPath = abilityPagesFullPath; diff --git a/compiler/src/validate_ui_syntax.ts b/compiler/src/validate_ui_syntax.ts index 318cf08..eb8a526 100644 --- a/compiler/src/validate_ui_syntax.ts +++ b/compiler/src/validate_ui_syntax.ts @@ -66,7 +66,7 @@ import { addLog, hasDecorator } from './utils'; -import { projectConfig } from '../main'; +import { projectConfig, abilityPagesFullPath } from '../main'; import { collectExtend } from './process_ui_syntax'; import { importModuleCollection } from './ets_checker'; import { isExtendFunction } from './process_ui_syntax'; @@ -225,7 +225,8 @@ function validateEntryAndPreviewCount(result: DecoratorResult, fileQuery: string + `decorator, or at least one '@Preview' decorator.`, fileName: fileName }); - } else if ((!isPreview || isPreview && checkEntry) && result.entryCount !== 1 && fileQuery === '?entry') { + } else if ((!isPreview || isPreview && checkEntry) && result.entryCount !== 1 && fileQuery === '?entry' && + !abilityPagesFullPath.includes(fileName)) { log.push({ type: LogType.ERROR, message: `A page configured in '${projectConfig.pagesJsonFileName}' must have one and only one '@Entry' `