diff --git a/compiler/main.js b/compiler/main.js index aa25d1a8b5df60a8ad647e0e21c7d24ab7d2965a..df95eb7ea3a36c890ea86c6328b544df99ad6f08 100644 --- a/compiler/main.js +++ b/compiler/main.js @@ -54,6 +54,7 @@ function initProjectConfig(projectConfig) { projectConfig.aceModuleJsonPath = projectConfig.aceModuleJsonPath || process.env.aceModuleJsonPath; projectConfig.aceSuperVisualPath = projectConfig.aceSuperVisualPath || process.env.aceSuperVisualPath + projectConfig.aceBuildJson = projectConfig.aceBuildJson || process.env.aceBuildJson; } function loadEntryObj(projectConfig) { @@ -187,19 +188,46 @@ function setEntrance(abilityConfig, abilityPages) { } function loadWorker(projectConfig) { - const workerPath = path.resolve(projectConfig.projectPath, WORKERS_DIR); - if (fs.existsSync(workerPath)) { - const workerFiles = []; - readFile(workerPath, workerFiles); - workerFiles.forEach((item) => { - if (/\.(ts|js)$/.test(item)) { - const relativePath = path.relative(workerPath, item).replace(/\.(ts|js)$/, ''); - projectConfig.entryObj[`./${WORKERS_DIR}/` + relativePath] = item; + if (validateWorkOption()) { + const workerConfig = JSON.parse(fs.readFileSync(projectConfig.aceBuildJson).toString()); + workerConfig.workers.forEach(worker => { + if (!/\.(ts|js)$/.test(worker)) { + worker += '.ts'; + } + const relativePath = path.relative(projectConfig.projectPath, worker); + if (filterWorker(relativePath)) { + projectConfig.entryObj[relativePath.replace(/\.(ts|js)$/,'')] = worker; } }) + } else { + const workerPath = path.resolve(projectConfig.projectPath, WORKERS_DIR); + if (fs.existsSync(workerPath)) { + const workerFiles = []; + readFile(workerPath, workerFiles); + workerFiles.forEach((item) => { + if (/\.(ts|js)$/.test(item)) { + const relativePath = path.relative(workerPath, item).replace(/\.(ts|js)$/, ''); + projectConfig.entryObj[`./${WORKERS_DIR}/` + relativePath] = item; + } + }) + } } } +function validateWorkOption() { + if (projectConfig.aceBuildJson && fs.existsSync(projectConfig.aceBuildJson)) { + const workerConfig = JSON.parse(fs.readFileSync(projectConfig.aceBuildJson).toString()); + if(workerConfig.workers) { + return true; + } + } + return false; +} + +function filterWorker(workerPath) { + return /\.(ts|js)$/.test(workerPath) && !/^\.\./.test(workerPath); +} + ;(function initSystemResource() { const sysResourcePath = path.resolve('./sysResource.js'); if (fs.existsSync(sysResourcePath)) {