const fs = require('fs')
|
const path = require('path')
|
|
const {
|
parsePages,
|
getPlatformProject
|
} = require('@dcloudio/uni-cli-shared')
|
|
const {
|
updateAppJsonUsingComponents
|
} = require('@dcloudio/uni-cli-shared/lib/cache')
|
|
const {
|
hasOwn,
|
parseStyle,
|
parseTabBar,
|
NON_APP_JSON_KEYS
|
} = require('../util')
|
|
function defaultCopy (name, value, json) {
|
json[name] = value
|
}
|
|
const pagesJson2AppJson = {
|
globalStyle: function (name, value, json) {
|
json.window = parseStyle(value)
|
if (json.window.usingComponents) {
|
json.usingComponents = json.window.usingComponents
|
delete json.window.usingComponents
|
}
|
},
|
tabBar: function (name, value, json) {
|
json.tabBar = parseTabBar(value)
|
},
|
preloadRule: defaultCopy,
|
entryPagePath: defaultCopy
|
}
|
|
function copyToJson (json, fromJson, options) {
|
Object.keys(options).forEach(name => {
|
if (hasOwn(fromJson, name)) {
|
options[name](name, fromJson[name], json)
|
}
|
})
|
}
|
|
function parseCondition (pagesJson) {
|
const condition = pagesJson.condition
|
const launchPagePath = process.env.UNI_CLI_LAUNCH_PAGE_PATH || ''
|
const launchPageQuery = process.env.UNI_CLI_LAUNCH_PAGE_QUERY || ''
|
const launchPageOptions = {
|
title: launchPagePath,
|
page: launchPagePath,
|
pageQuery: launchPageQuery
|
}
|
const compileModeJson = {
|
modes: []
|
}
|
if (condition && Array.isArray(condition.list) && condition.list.length) {
|
compileModeJson.modes = condition.list.map(item => {
|
return {
|
title: item.name,
|
page: item.path,
|
pageQuery: item.query
|
}
|
})
|
delete pagesJson.condition
|
}
|
if (launchPagePath) {
|
compileModeJson.modes = [launchPageOptions]
|
}
|
const miniIdeDir = path.join(process.env.UNI_OUTPUT_DIR, '.mini-ide')
|
if (!fs.existsSync(miniIdeDir)) {
|
fs.mkdirSync(miniIdeDir, { recursive: true })
|
fs.writeFileSync(
|
path.join(miniIdeDir, 'compileMode.json'),
|
JSON.stringify(compileModeJson, null, 2)
|
)
|
}
|
}
|
|
const projectKeys = ['component2', 'enableAppxNg']
|
|
module.exports = function (pagesJson, manifestJson) {
|
const app = {
|
pages: [],
|
subPackages: []
|
}
|
|
const subPackages = {}
|
|
parsePages(pagesJson, function (page) {
|
app.pages.push(page.path)
|
}, function (root, page, subPackage) {
|
if (!subPackages[root]) {
|
subPackages[root] = {
|
root,
|
pages: []
|
}
|
Object.keys(subPackage).forEach(name => {
|
if (['root', 'pages'].indexOf(name) === -1) {
|
subPackages[root][name] = subPackage[name]
|
}
|
})
|
}
|
subPackages[root].pages.push(page.path)
|
})
|
|
Object.keys(subPackages).forEach(root => {
|
app.subPackages.push(subPackages[root])
|
})
|
|
copyToJson(app, pagesJson, pagesJson2AppJson)
|
|
const platformJson = manifestJson['mp-alipay'] || {}
|
|
Object.keys(platformJson).forEach(key => {
|
if (!projectKeys.includes(key) && !NON_APP_JSON_KEYS.includes(key)) {
|
// usingComponents 是编译模式开关,需要过滤,不能拷贝到 app
|
app[key] = platformJson[key]
|
}
|
})
|
|
if (app.usingComponents) {
|
updateAppJsonUsingComponents(app.usingComponents)
|
}
|
const projectName = getPlatformProject()
|
|
let project = {}
|
|
const projectPath = path.resolve(process.env.UNI_INPUT_DIR, projectName)
|
if (fs.existsSync(projectPath)) {
|
project = require(projectPath)
|
} else {
|
project.component2 = hasOwn(platformJson, 'component2') ? platformJson.component2 : true
|
project.enableAppxNg = hasOwn(platformJson, 'enableAppxNg') ? platformJson.enableAppxNg : true
|
}
|
|
parseCondition(pagesJson)
|
|
return [{
|
name: 'app',
|
content: app
|
}, {
|
name: 'mini.project',
|
content: project
|
}]
|
}
|