@dcloudio/uni-cli-shared
Version:
uni-cli-shared
66 lines (60 loc) • 2.13 kB
JavaScript
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
}
}