const fs = require('fs') const path = require('path') const { parseJson } = require('./json') const merge = require('./pages-json').default function normalizeUniModulesPagesJson (pagesJson, pluginId) { if (Array.isArray(pagesJson.pages)) { pagesJson.pages.forEach(page => { page.path = 'uni_modules/' + pluginId + '/' + page.path }) } if (Array.isArray(pagesJson.subPackages)) { pagesJson.subPackages.forEach(subPackage => { subPackage.root = 'uni_modules/' + pluginId + '/' + subPackage.root }) } return pagesJson } function initUniModules () { global.uniModules = [] try { global.uniModules = fs .readdirSync(path.resolve(process.env.UNI_INPUT_DIR, 'uni_modules')) .filter(module => fs.existsSync( path.resolve(process.env.UNI_INPUT_DIR, 'uni_modules', module, 'package.json') ) ) } catch (e) {} } module.exports = { initUniModules, getPagesJson (content) { const uniModulesDir = path.resolve(process.env.UNI_INPUT_DIR, 'uni_modules') const pluginPagesJsons = [] global.uniModules.forEach(plugin => { const pagesJsonPath = path.resolve(uniModulesDir, plugin, 'pages.json') if (fs.existsSync(pagesJsonPath)) { pluginPagesJsons.push( normalizeUniModulesPagesJson(parseJson(fs.readFileSync(pagesJsonPath).toString(), true), plugin) ) } }) content = content || fs.readFileSync(path.resolve(process.env.UNI_INPUT_DIR, 'pages.json'), 'utf8') const mainPagesJson = parseJson(content, true) if (pluginPagesJsons.length) { const pagesJson = merge(pluginPagesJsons.concat(mainPagesJson)) if (Array.isArray(mainPagesJson.pages)) { // entry page const entryPagePath = mainPagesJson.pages[0].path const index = pagesJson.pages.findIndex(page => page.path === entryPagePath) const entryPage = pagesJson.pages[index] pagesJson.pages.splice(index, 1) pagesJson.pages.unshift(entryPage) } return pagesJson } return mainPagesJson } }