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

feat(v3): subPackages

上级 9a8202d5
......@@ -206,7 +206,8 @@ const third = [
'setPageMeta',
'onNativeEventReceive',
'sendNativeEvent',
'preloadPage'
'preloadPage',
'loadSubPackage'
]
const ad = [
......
......@@ -329,18 +329,18 @@ function upx2px (number, newDeviceWidth) {
if (number === 0) {
return 0
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
return 1
} else {
return 0.5
}
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
result = 1;
} else {
result = 0.5;
}
}
return number < 0 ? -result : result
}
......
......@@ -217,7 +217,8 @@ var serviceContext = (function () {
'setPageMeta',
'onNativeEventReceive',
'sendNativeEvent',
'preloadPage'
'preloadPage',
'loadSubPackage'
];
const ad = [
......@@ -1627,6 +1628,27 @@ var serviceContext = (function () {
getProvider: getProvider
});
const loadSubPackage = {
root: {
type: String,
required: true,
validator (value, params) {
const subPackages = __uniConfig.subPackages;
if (!Array.isArray(subPackages) || subPackages.length === 0) {
return 'no subPackages'
}
if (!subPackages.find(subPackage => subPackage.root === value)) {
return 'root `' + value + '` is not found'
}
}
}
};
var require_context_module_0_23 = /*#__PURE__*/Object.freeze({
__proto__: null,
loadSubPackage: loadSubPackage
});
function encodeQueryString (url) {
if (typeof url !== 'string') {
return url
......@@ -1814,7 +1836,7 @@ var serviceContext = (function () {
}
};
var require_context_module_0_23 = /*#__PURE__*/Object.freeze({
var require_context_module_0_24 = /*#__PURE__*/Object.freeze({
__proto__: null,
redirectTo: redirectTo,
reLaunch: reLaunch,
......@@ -1859,7 +1881,7 @@ var serviceContext = (function () {
const removeStorage = getStorage;
const removeStorageSync = getStorageSync;
var require_context_module_0_24 = /*#__PURE__*/Object.freeze({
var require_context_module_0_25 = /*#__PURE__*/Object.freeze({
__proto__: null,
getStorage: getStorage,
getStorageSync: getStorageSync,
......@@ -1896,7 +1918,7 @@ var serviceContext = (function () {
}
};
var require_context_module_0_25 = /*#__PURE__*/Object.freeze({
var require_context_module_0_26 = /*#__PURE__*/Object.freeze({
__proto__: null,
loadFontFace: loadFontFace
});
......@@ -1939,7 +1961,7 @@ var serviceContext = (function () {
}
};
var require_context_module_0_26 = /*#__PURE__*/Object.freeze({
var require_context_module_0_27 = /*#__PURE__*/Object.freeze({
__proto__: null,
setNavigationBarColor: setNavigationBarColor,
setNavigationBarTitle: setNavigationBarTitle
......@@ -1959,7 +1981,7 @@ var serviceContext = (function () {
}
};
var require_context_module_0_27 = /*#__PURE__*/Object.freeze({
var require_context_module_0_28 = /*#__PURE__*/Object.freeze({
__proto__: null,
pageScrollTo: pageScrollTo
});
......@@ -2080,7 +2102,7 @@ var serviceContext = (function () {
}
};
var require_context_module_0_28 = /*#__PURE__*/Object.freeze({
var require_context_module_0_29 = /*#__PURE__*/Object.freeze({
__proto__: null,
showModal: showModal,
showToast: showToast,
......@@ -2176,7 +2198,7 @@ var serviceContext = (function () {
}
};
var require_context_module_0_29 = /*#__PURE__*/Object.freeze({
var require_context_module_0_30 = /*#__PURE__*/Object.freeze({
__proto__: null,
setTabBarItem: setTabBarItem,
setTabBarStyle: setTabBarStyle,
......@@ -2215,13 +2237,14 @@ var serviceContext = (function () {
'./network/socket.js': require_context_module_0_20,
'./network/upload-file.js': require_context_module_0_21,
'./plugin/get-provider.js': require_context_module_0_22,
'./route/route.js': require_context_module_0_23,
'./storage/storage.js': require_context_module_0_24,
'./ui/load-font-face.js': require_context_module_0_25,
'./ui/navigation-bar.js': require_context_module_0_26,
'./ui/page-scroll-to.js': require_context_module_0_27,
'./ui/popup.js': require_context_module_0_28,
'./ui/tab-bar.js': require_context_module_0_29,
'./plugin/load-sub-package.js': require_context_module_0_23,
'./route/route.js': require_context_module_0_24,
'./storage/storage.js': require_context_module_0_25,
'./ui/load-font-face.js': require_context_module_0_26,
'./ui/navigation-bar.js': require_context_module_0_27,
'./ui/page-scroll-to.js': require_context_module_0_28,
'./ui/popup.js': require_context_module_0_29,
'./ui/tab-bar.js': require_context_module_0_30,
};
var req = function req(key) {
......@@ -6550,7 +6573,7 @@ var serviceContext = (function () {
sslVerify: !sslVerify
};
if (method !== 'GET') {
options.body = data;
options.body = typeof data === 'string' ? data : JSON.stringify(data);
}
try {
stream.fetch(options, ({
......@@ -7489,6 +7512,24 @@ var serviceContext = (function () {
return weex.requireModule('plus').sendNativeEvent(event, data, callback)
}
const SUB_FILENAME = 'app-sub-service.js';
function evaluateScriptFile (file, callback) {
setTimeout(() => {
callback();
}, 2000);
}
function loadSubPackage$1 ({
root
}, callbackId) {
evaluateScriptFile(root + '/' + SUB_FILENAME, res => {
invoke$1(callbackId, {
errMsg: 'loadSubPackage:ok'
});
});
}
let firstBackTime = 0;
function quit () {
......@@ -8374,6 +8415,92 @@ 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();
});
}
function loadSubPackages(packages, callback) {
if (process.env.NODE_ENV !== 'production') {
console.log('UNIAPP[loadSubPackages]:' + JSON.stringify(packages));
}
const startTime = Date.now();
Promise.all(
packages.map(root => {
// 目前阶段:假定一定会加载成功
loadedSubPackages.push(root);
return uni.loadSubPackage({
root
})
})
).then(res => {
if (process.env.NODE_ENV !== 'production') {
console.log('UNIAPP[loadSubPackages]:' + (Date.now() - startTime));
}
callback && callback(true);
}).catch(err => {
console.log(err);
callback && callback(false);
});
}
const pages = [];
function getCurrentPages$1 (returnAll) {
......@@ -8512,7 +8639,9 @@ var serviceContext = (function () {
if (!webview.nvue) {
const pageId = webview.id;
try {
createPage(route, pageId, query, pageInstance).$mount();
loadPage(route, () => {
createPage(route, pageId, query, pageInstance).$mount();
});
} catch (e) {
console.error(e);
}
......@@ -9120,10 +9249,8 @@ var serviceContext = (function () {
waiting.close();
}
if (~['top', 'center', 'bottom'].indexOf(position)) {
const richText = `<span>${title}</span>`;
plus.nativeUI.toast(richText, {
verticalAlign: position,
type: 'richtext'
plus.nativeUI.toast(title, {
verticalAlign: position
});
toast = true;
toastTimeout = setTimeout(() => {
......@@ -9217,7 +9344,7 @@ var serviceContext = (function () {
cancelColor = '#000000',
confirmText = '确定',
confirmColor = '#3CC51F'
} = {}, callbackId) {
} = {}, callbackId) {
content = content || ' ';
plus.nativeUI.confirm(content, (e) => {
if (showCancel) {
......@@ -9720,6 +9847,7 @@ var serviceContext = (function () {
getCurrentSubNVue: getCurrentSubNVue,
onNativeEventReceive: onNativeEventReceive,
sendNativeEvent: sendNativeEvent,
loadSubPackage: loadSubPackage$1,
navigateBack: navigateBack$1,
navigateTo: navigateTo$1,
reLaunch: reLaunch$1,
......@@ -13363,7 +13491,10 @@ var serviceContext = (function () {
nid = String(nid);
const target = vd.elements.find(target => target.cid === cid && target.nid === nid);
if (!target) {
return console.error(`event handler[${cid}][${nid}] not found`)
if (process.env.NODE_ENV !== 'production') {
console.error(`event handler[${cid}][${nid}] not found`);
}
return
}
const type = event.type;
const mpEvent = wrapperEvent(event);
......@@ -13938,7 +14069,8 @@ var serviceContext = (function () {
},
mounted () {
if (this.mpType === 'page') {
callPageHook(this.$scope, 'onReady');
callPageHook(this.$scope, 'onReady');
preloadSubPackages(this.$scope.route);
}
}
});
......
const isWin = /^win/.test(process.platform)
const normalizePath = path => (isWin ? path.replace(/\\/g, '/') : path)
function optimizeChunk(chunk) {
if (!chunk) {
return
}
const subPackages = Object.keys(process.UNI_SUBPACKAGES).map(root => `${root}/app-sub-service`)
const chunks = Array.from(chunk.groupsIterable)[0].chunks
Array.from(chunk.groupsIterable)[0].chunks = chunks.filter(chunk => !subPackages.includes(normalizePath(chunk.id)))
}
class SubPackagesPlugin {
apply(compiler) {
compiler.hooks.thisCompilation.tap('SubPackagesPlugin', compilation => {
compilation.hooks.afterOptimizeChunkIds.tap('SubPackagesPlugin', chunks => {
optimizeChunk(chunks.find(chunk => chunk.id === 'app-service'))
})
})
}
}
module.exports = SubPackagesPlugin
......@@ -23,7 +23,8 @@ module.exports = {
template: '.wxml',
filter: '.wxs'
},
filterTag: 'wxs'
filterTag: 'wxs',
subPackages: true
},
copyWebpackOptions (platformOptions, vueOptions) {
const copyOptions = []
......@@ -42,7 +43,16 @@ module.exports = {
}
return copyOptions
},
chainWebpack (config) {
chainWebpack (config, vueOptions) {
const isAppService = !!vueOptions.pluginOptions['uni-app-plus'].service
if (isAppService) {
const subPackages = Object.keys(process.UNI_SUBPACKAGES)
if (process.env.UNI_OPT_SUBPACKAGES && subPackages.length) {
config
.plugin('uni-app-plus-subpackages')
.use(require('./plugin/sub-packages-plugin'))
}
}
if (process.env.NODE_ENV === 'production') {
config.optimization.minimizer('terser').tap((args) => {
if (!args[0].terserOptions.output) {
......
......@@ -329,18 +329,18 @@ function upx2px (number, newDeviceWidth) {
if (number === 0) {
return 0
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
return 1
} else {
return 0.5
}
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
result = 1;
} else {
result = 0.5;
}
}
return number < 0 ? -result : result
}
......@@ -358,7 +358,8 @@ var baseApi = /*#__PURE__*/Object.freeze({
// 不支持的 API 列表
const todos = [
'preloadPage'
'preloadPage',
'loadSubPackage'
// 'getRecorderManager',
// 'getBackgroundAudioManager',
// 'createInnerAudioContext',
......
......@@ -329,18 +329,18 @@ function upx2px (number, newDeviceWidth) {
if (number === 0) {
return 0
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
return 1
} else {
return 0.5
}
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
result = 1;
} else {
result = 0.5;
}
}
return number < 0 ? -result : result
}
......@@ -391,7 +391,7 @@ var previewImage = {
};
// 不支持的 API 列表
const todos = [
const todos = [
'preloadPage'
// 'hideKeyboard',
// 'onGyroscopeChange',
......@@ -422,7 +422,7 @@ const todos = [
// 'stopBeaconDiscovery',
// 'hideShareMenu',
// 'onWindowResize',
// 'offWindowResize',
// 'offWindowResize',
// 'vibrate'
];
......
......@@ -329,18 +329,18 @@ function upx2px (number, newDeviceWidth) {
if (number === 0) {
return 0
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
return 1
} else {
return 0.5
}
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
result = 1;
} else {
result = 0.5;
}
}
return number < 0 ? -result : result
}
......@@ -394,7 +394,8 @@ const protocols = {
previewImage
};
const todos = [
'preloadPage'
'preloadPage',
'loadSubPackage'
// 'startBeaconDiscovery',
// 'stopBeaconDiscovery',
// 'getBeacons',
......
......@@ -329,18 +329,18 @@ function upx2px (number, newDeviceWidth) {
if (number === 0) {
return 0
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
return 1
} else {
return 0.5
}
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
result = 1;
} else {
result = 0.5;
}
}
return number < 0 ? -result : result
}
......@@ -392,7 +392,8 @@ var previewImage = {
// 不支持的 API 列表
const todos = [
'preloadPage'
'preloadPage',
'loadSubPackage'
// 'createCameraContext',
// 'createLivePlayerContext',
// 'getSavedFileInfo',
......
......@@ -329,18 +329,18 @@ function upx2px (number, newDeviceWidth) {
if (number === 0) {
return 0
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
return 1
} else {
return 0.5
}
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
result = 1;
} else {
result = 0.5;
}
}
return number < 0 ? -result : result
}
......@@ -412,7 +412,8 @@ const protocols = {
};
const todos = [
'vibrate',
'preloadPage'
'preloadPage',
'loadSubPackage'
];
const canIUses = [];
......
......@@ -329,18 +329,18 @@ function upx2px (number, newDeviceWidth) {
if (number === 0) {
return 0
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
return 1
} else {
return 0.5
}
}
let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);
if (result < 0) {
result = -result;
}
result = Math.floor(result + EPS);
if (result === 0) {
if (deviceDPR === 1 || !isIOS) {
result = 1;
} else {
result = 0.5;
}
}
return number < 0 ? -result : result
}
......@@ -393,7 +393,10 @@ var previewImage = {
const protocols = {
previewImage
};
const todos = [];
const todos = [
'preloadPage',
'loadSubPackage'
];
const canIUses = [];
const CALLBACKS = ['success', 'fail', 'cancel', 'complete'];
......
const path = require('path')
const {
normalizePath
} = require('@dcloudio/uni-cli-shared')
function createCacheGroups () {
const cacheGroups = {}
if (process.UNI_CONFUSION) { // 加密
cacheGroups.confusion = {
minSize: 0,
minChunks: 1,
test: function (module) {
if (!module.resource) {
return false
}
if (process.UNI_CONFUSION.includes(normalizePath(module.resource))) {
return true
}
return false
},
name: 'app-confusion',
chunks: 'all'
}
}
process.env.UNI_OPT_SUBPACKAGES && Object.keys(process.UNI_SUBPACKAGES).forEach(root => {
cacheGroups[root] = {
minSize: 0,
minChunks: 1,
test: function (module) {
if (!module.resource) {
return false
}
if (normalizePath(module.resource).includes(root + '/')) {
return true
}
return false
},
name: root + '/app-sub-service',
chunks: 'all'
}
})
return cacheGroups
}
module.exports = function getSplitChunks () {
const {
normalizePath
} = require('@dcloudio/uni-cli-shared')
if (process.env.UNI_USING_V3) {
if (!process.UNI_CONFUSION) { // 无加密
return false
}
return {
cacheGroups: {
vendor: {
minSize: 0,
minChunks: 1,
test: function (module) {
if (!module.resource) {
return false
}
if (process.UNI_CONFUSION.includes(normalizePath(module.resource))) {
return true
}
return false
},
name: 'app-confusion',
chunks: 'all'
}
}
cacheGroups: createCacheGroups()
}
}
if (!process.env.UNI_USING_COMPONENTS) {
return {
cacheGroups: {
......
......@@ -478,6 +478,7 @@ module.exports = function (pagesJson, userManifestJson) {
manifest.content = manifestJson
const subPackages = []
// 分包合并
if (appJson.subPackages && appJson.subPackages.length) {
appJson.subPackages.forEach(subPackage => {
......@@ -485,6 +486,9 @@ module.exports = function (pagesJson, userManifestJson) {
subPackage.pages.forEach(page => {
appJson.pages.push(normalizePath(path.join(subPackage.root, page)))
})
subPackages.push({
root: subPackage.root
})
}
})
}
......@@ -499,6 +503,9 @@ module.exports = function (pagesJson, userManifestJson) {
}
if (process.env.UNI_USING_V3 || process.env.UNI_USING_V3_NATIVE) {
if (process.env.UNI_USING_V3) {
appJson.subPackages = subPackages
}
return require('./index.v3')(appJson, manifestJson, {
manifest,
pagesJson,
......
export const loadSubPackage = {
root: {
type: String,
required: true,
validator (value, params) {
const subPackages = __uniConfig.subPackages
if (!Array.isArray(subPackages) || subPackages.length === 0) {
return 'no subPackages'
}
if (!subPackages.find(subPackage => subPackage.root === value)) {
return 'root `' + value + '` is not found'
}
}
}
}
......@@ -52,6 +52,7 @@ export * from './plugin/restore-global'
export * from './plugin/sub-nvue'
export * from './plugin/on-native-event-receive'
export * from './plugin/send-native-event'
export * from './plugin/load-sub-package'
export * from './route/navigate-back'
export * from './route/navigate-to'
......
......@@ -78,7 +78,7 @@ export function createRequestTaskById (requestTaskId, {
sslVerify: !sslVerify
}
if (method !== 'GET') {
options.body = typeof data === "string" ? data : JSON.stringify(data)
options.body = typeof data === 'string' ? data : JSON.stringify(data)
}
try {
stream.fetch(options, ({
......
import {
invoke
} from '../../bridge'
const SUB_FILENAME = 'app-sub-service.js'
function evaluateScriptFile (file, callback) {
setTimeout(() => {
callback()
}, 2000)
}
export function loadSubPackage ({
root
}, callbackId) {
evaluateScriptFile(root + '/' + SUB_FILENAME, res => {
invoke(callbackId, {
errMsg: 'loadSubPackage:ok'
})
})
}
......@@ -38,7 +38,7 @@ export function showToast ({
}
if (~['top', 'center', 'bottom'].indexOf(position)) {
plus.nativeUI.toast(title, {
verticalAlign: position,
verticalAlign: position
})
toast = true
toastTimeout = setTimeout(() => {
......
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
}
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()
})
}
function loadSubPackages(packages, callback) {
if (process.env.NODE_ENV !== 'production') {
console.log('UNIAPP[loadSubPackages]:' + JSON.stringify(packages))
}
const startTime = Date.now()
Promise.all(
packages.map(root => {
// 目前阶段:假定一定会加载成功
loadedSubPackages.push(root)
return uni.loadSubPackage({
root
})
})
).then(res => {
if (process.env.NODE_ENV !== 'production') {
console.log('UNIAPP[loadSubPackages]:' + (Date.now() - startTime))
}
callback && callback(true)
}).catch(err => {
console.log(err)
callback && callback(false)
})
}
......@@ -13,6 +13,10 @@ import {
createPage
} from '../../page-factory'
import {
loadPage
} from './load-sub-package'
const pages = []
export function getCurrentPages (returnAll) {
......@@ -151,7 +155,9 @@ export function registerPage ({
if (!webview.nvue) {
const pageId = webview.id
try {
createPage(route, pageId, query, pageInstance).$mount()
loadPage(route, () => {
createPage(route, pageId, query, pageInstance).$mount()
})
} catch (e) {
console.error(e)
}
......
......@@ -32,6 +32,10 @@ import {
getStatusbarHeight
} from '../../api/util'
import {
preloadSubPackages
} from '../load-sub-package'
function parsePageCreateOptions (vm, route) {
const pagePath = '/' + route
const routeOptions = __uniRoutes.find(route => route.path === pagePath)
......@@ -104,7 +108,8 @@ export function initLifecycle (Vue) {
},
mounted () {
if (this.mpType === 'page') {
callPageHook(this.$scope, 'onReady')
callPageHook(this.$scope, 'onReady')
preloadSubPackages(this.$scope.route)
}
}
})
......
......@@ -3,7 +3,8 @@ import {
} from 'uni-shared'
// 不支持的 API 列表
const todos = [
'preloadPage'
'preloadPage',
'loadSubPackage'
// 'getRecorderManager',
// 'getBackgroundAudioManager',
// 'createInnerAudioContext',
......
import previewImage from '../../../mp-weixin/helpers/normalize-preview-image'
// 不支持的 API 列表
const todos = [
const todos = [
'preloadPage'
// 'hideKeyboard',
// 'onGyroscopeChange',
......@@ -31,7 +31,7 @@ const todos = [
// 'stopBeaconDiscovery',
// 'hideShareMenu',
// 'onWindowResize',
// 'offWindowResize',
// 'offWindowResize',
// 'vibrate'
]
......@@ -117,4 +117,4 @@ export {
protocols,
todos,
canIUses
}
}
......@@ -3,7 +3,8 @@ export const protocols = {
previewImage
}
export const todos = [
'preloadPage'
'preloadPage',
'loadSubPackage'
// 'startBeaconDiscovery',
// 'stopBeaconDiscovery',
// 'getBeacons',
......
......@@ -2,7 +2,8 @@ import previewImage from '../../../mp-weixin/helpers/normalize-preview-image'
// 不支持的 API 列表
const todos = [
'preloadPage'
'preloadPage',
'loadSubPackage'
// 'createCameraContext',
// 'createLivePlayerContext',
// 'getSavedFileInfo',
......
......@@ -22,6 +22,7 @@ export const protocols = {
}
export const todos = [
'vibrate',
'preloadPage'
'preloadPage',
'loadSubPackage'
]
export const canIUses = []
......@@ -3,5 +3,8 @@ import previewImage from '../../../mp-weixin/helpers/normalize-preview-image'
export const protocols = {
previewImage
}
export const todos = []
export const canIUses = []
export const todos = [
'preloadPage',
'loadSubPackage'
]
export const canIUses = []
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册