提交 d6e1c8ef 编写于 作者: fxy060608's avatar fxy060608

refactor(v3): subPackages

上级 aecbbd7c
......@@ -7414,7 +7414,7 @@ var serviceContext = (function () {
console.log(`[restoreGlobal][${Date.now()}]`);
}
weex = newWeex;
plus = newPlus;
plus = newPlus;
plus.navigator.setStatusBarStyle = newSetStatusBarStyle;
/* eslint-disable no-global-assign */
setTimeout = newSetTimeout;
......@@ -7422,6 +7422,7 @@ var serviceContext = (function () {
setInterval = newSetInterval;
clearInterval = newClearInterval;
}
__uniConfig.serviceReady = true;
}
function wrapper$1 (webview) {
......@@ -7523,17 +7524,119 @@ var serviceContext = (function () {
return weex.requireModule('plus').sendNativeEvent(event, data, callback)
}
const loadedSubPackages = [];
/**
* 指定路由 ready 后,检查是否触发分包预加载
* @param {Object} route
*/
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)
// }
}
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$1(subPackage.root, callback);
}
}
if (!isInSubPackage) {
callback();
}
}
function loadSubPackage$1 (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);
});
}
const SUB_FILENAME$1 = 'app-sub-service.js';
function evaluateScriptFile (file, callback) {
// TODO 有可能当前 instance 是非 app-service
weex.requireModule('plus').evalJSFiles([file], callback);
__uniConfig.onServiceReady(() => {
weex.requireModule('plus').evalJSFiles([file], callback);
});
}
function loadSubPackage$1 ({
function loadSubPackage$2 ({
root
}, callbackId) {
evaluateScriptFile(root + '/' + SUB_FILENAME, res => {
if (loadedSubPackages.indexOf(root) !== -1) {
return {
errMsg: 'loadSubPackage:ok'
}
}
loadedSubPackages.push(root);
if (process.env.NODE_ENV !== 'production') {
console.log('UNIAPP[loadSubPackage]:' + root);
}
const startTime = Date.now();
evaluateScriptFile(root + '/' + SUB_FILENAME$1, res => {
if (process.env.NODE_ENV !== 'production') {
console.log('UNIAPP[loadSubPackage]:耗时(' + (Date.now() - startTime) + ')');
}
invoke$1(callbackId, {
errMsg: 'loadSubPackage:ok'
});
......@@ -8430,91 +8533,6 @@ var serviceContext = (function () {
return pageVm
}
const loadedSubPackages = [];
/**
* 指定路由 ready 后,检查是否触发分包预加载
* @param {Object} route
*/
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
}
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);
}
}
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$2(subPackage.root, callback);
}
}
if (!isInSubPackage) {
callback();
}
}
function loadSubPackage$2 (root, callback) {
if (loadedSubPackages.indexOf(root) !== -1) {
return callback()
}
loadSubPackages([root], () => {
callback();
});
}
const SUB_FILENAME$1 = 'app-sub-service.js';
function evaluateScriptFiles (files, callback) {
// TODO 有可能当前 instance 是非 app-service
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$1
}), res => {
if (process.env.NODE_ENV !== 'production') {
console.log('UNIAPP[loadSubPackages]:' + (Date.now() - startTime));
}
callback && callback(true);
});
}
const pages = [];
function getCurrentPages$1 (returnAll) {
......@@ -9933,7 +9951,7 @@ var serviceContext = (function () {
getCurrentSubNVue: getCurrentSubNVue,
onNativeEventReceive: onNativeEventReceive,
sendNativeEvent: sendNativeEvent,
loadSubPackage: loadSubPackage$1,
loadSubPackage: loadSubPackage$2,
navigateBack: navigateBack$1,
navigateTo: navigateTo$1,
reLaunch: reLaunch$1,
......
......@@ -67,10 +67,12 @@ module.exports = function definePages (appJson) {
return {
name: 'app-config-service.js',
content: `
var isReady=false;var onReadyCallbacks=[];
var isReady=false;var onReadyCallbacks=[];
var isServiceReady=false;var onServiceReadyCallbacks=[];
var __uniConfig = ${JSON.stringify(appJson, null)};
var __uniRoutes = ${JSON.stringify(__uniRoutes)};
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
service.register("uni-app-config",{create(a,b,c){if(!__uniConfig.viewport){var d=b.weex.config.env.scale,e=b.weex.config.env.deviceWidth,f=Math.ceil(e/d);Object.assign(__uniConfig,{viewport:f,defaultFontSize:Math.round(f/20)})}return{instance:{__uniConfig:__uniConfig,__uniRoutes:__uniRoutes,${globalStatement}}}}});
`
}
......
......@@ -2,17 +2,35 @@ import {
invoke
} from '../../bridge'
import {
loadedSubPackages
} from '../../framework/load-sub-package'
const SUB_FILENAME = 'app-sub-service.js'
function evaluateScriptFile (file, callback) {
// TODO 有可能当前 instance 是非 app-service
weex.requireModule('plus').evalJSFiles([file], callback)
__uniConfig.onServiceReady(() => {
weex.requireModule('plus').evalJSFiles([file], callback)
})
}
export function loadSubPackage ({
root
}, callbackId) {
if (loadedSubPackages.indexOf(root) !== -1) {
return {
errMsg: 'loadSubPackage:ok'
}
}
loadedSubPackages.push(root)
if (process.env.NODE_ENV !== 'production') {
console.log('UNIAPP[loadSubPackage]:' + root)
}
const startTime = Date.now()
evaluateScriptFile(root + '/' + SUB_FILENAME, res => {
if (process.env.NODE_ENV !== 'production') {
console.log('UNIAPP[loadSubPackage]:耗时(' + (Date.now() - startTime) + ')')
}
invoke(callbackId, {
errMsg: 'loadSubPackage:ok'
})
......
import {
newSetStatusBarStyle
} from '../../bridge'
} from '../../bridge'
export function restoreGlobal (
newWeex,
newPlus,
......@@ -19,7 +19,7 @@ export function restoreGlobal (
console.log(`[restoreGlobal][${Date.now()}]`)
}
weex = newWeex
plus = newPlus
plus = newPlus
plus.navigator.setStatusBarStyle = newSetStatusBarStyle
/* eslint-disable no-global-assign */
setTimeout = newSetTimeout
......@@ -27,4 +27,5 @@ export function restoreGlobal (
setInterval = newSetInterval
clearInterval = newClearInterval
}
__uniConfig.serviceReady = true
}
const loadedSubPackages = []
export const loadedSubPackages = []
/**
* 指定路由 ready 后,检查是否触发分包预加载
......@@ -16,24 +16,26 @@ export function preloadSubPackages (route) {
if (!packages.length) {
return
}
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)
}
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) {
......@@ -63,8 +65,9 @@ function loadSubPackage (root, callback) {
const SUB_FILENAME = 'app-sub-service.js'
function evaluateScriptFiles (files, callback) {
// TODO 有可能当前 instance 是非 app-service
weex.requireModule('plus').evalJSFiles(files, callback)
__uniConfig.onServiceReady(() => {
weex.requireModule('plus').evalJSFiles(files, callback)
})
}
function loadSubPackages (packages, callback) {
......@@ -77,7 +80,7 @@ function loadSubPackages (packages, callback) {
return root + '/' + SUB_FILENAME
}), res => {
if (process.env.NODE_ENV !== 'production') {
console.log('UNIAPP[loadSubPackages]:' + (Date.now() - startTime))
console.log('UNIAPP[loadSubPackages]:耗时(' + (Date.now() - startTime) + ')')
}
callback && callback(true)
})
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册