export const loadedSubPackages = []
|
|
/**
|
* 指定路由 ready 后,检查是否触发分包预加载
|
* @param {Object} route
|
*/
|
export function preloadSubPackages (route) {
|
if (!__uniConfig.preloadRule) {
|
return
|
}
|
const options = __uniConfig.preloadRule[route]
|
if (!options || !Array.isArray(options.packages)) {
|
return
|
}
|
const packages = options.packages.filter(root => loadedSubPackages.indexOf(root) === -1)
|
if (!packages.length) {
|
return
|
}
|
loadSubPackages(options.packages)
|
// 暂不需要网络下载
|
// const network = options.network || 'wifi'
|
// if (network === 'wifi') {
|
// uni.getNetworkType({
|
// success (res) {
|
// if (process.env.NODE_ENV !== 'production') {
|
// console.log('UNIAPP[preloadRule]:' + res.networkType + ':' + JSON.stringify(options))
|
// }
|
// if (res.networkType === 'wifi') {
|
// loadSubPackages(options.packages)
|
// }
|
// }
|
// })
|
// } else {
|
// if (process.env.NODE_ENV !== 'production') {
|
// console.log('UNIAPP[preloadRule]:' + JSON.stringify(options))
|
// }
|
// loadSubPackages(options.packages)
|
// }
|
}
|
|
export function loadPage (route, callback) {
|
let isInSubPackage = false
|
const subPackages = __uniConfig.subPackages
|
if (Array.isArray(subPackages)) {
|
const subPackage = subPackages.find(subPackage => route.indexOf(subPackage.root) === 0)
|
if (subPackage) {
|
isInSubPackage = true
|
loadSubPackage(subPackage.root, callback)
|
}
|
}
|
if (!isInSubPackage) {
|
callback()
|
}
|
}
|
|
function loadSubPackage (root, callback) {
|
if (loadedSubPackages.indexOf(root) !== -1) {
|
return callback()
|
}
|
loadSubPackages([root], () => {
|
callback()
|
})
|
}
|
|
const SUB_FILENAME = 'app-sub-service.js'
|
|
function evaluateScriptFiles (files, callback) {
|
__uniConfig.onServiceReady(() => {
|
weex.requireModule('plus').evalJSFiles(files, callback)
|
})
|
}
|
|
function loadSubPackages (packages, callback) {
|
if (process.env.NODE_ENV !== 'production') {
|
console.log('UNIAPP[loadSubPackages]:' + JSON.stringify(packages))
|
}
|
const startTime = Date.now()
|
evaluateScriptFiles(packages.map(root => {
|
loadedSubPackages.push(root)
|
return root + '/' + SUB_FILENAME
|
}), res => {
|
if (process.env.NODE_ENV !== 'production') {
|
console.log('UNIAPP[loadSubPackages]:耗时(' + (Date.now() - startTime) + ')')
|
}
|
callback && callback(true)
|
})
|
}
|