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

refactor(v3): subPackages

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