const path = require('path') const { hasOwn } = require('./util') const { getJson, parseJson } = require('./json') const defaultRouter = { mode: 'hash', base: '/' } const defaultAsync = { loading: 'AsyncLoading', error: 'AsyncError', delay: 200, timeout: 60000 } const networkTimeout = { request: 60000, connectSocket: 60000, uploadFile: 60000, downloadFile: 60000 } function getManifestJson () { return getJson('manifest.json') } function parseManifestJson (content) { return parseJson(content) } function getNetworkTimeout (manifestJson) { if (!manifestJson) { manifestJson = getManifestJson() } return Object.assign({}, networkTimeout, manifestJson.networkTimeout || {}) } function getH5Options (manifestJson) { if (!manifestJson) { manifestJson = getManifestJson() } const h5 = manifestJson[process.env.UNI_SUB_PLATFORM || process.env.UNI_PLATFORM] || {} h5.appid = (manifestJson.appid || '').replace('__UNI__', '') h5.title = h5.title || manifestJson.name || '' h5.router = Object.assign({}, defaultRouter, h5.router || {}) h5.async = Object.assign({}, defaultAsync, h5.async || {}) let base = h5.router.base if (!base.startsWith('/') && !base.startsWith('./')) { base = '/' + base } if (!base.endsWith('/')) { base = base + '/' } // 相对路径仅支持 hash 模式 if (base.startsWith('./')) { h5.router.mode = defaultRouter.mode } h5.router.base = base if (process.env.NODE_ENV === 'production') { // 生产模式,启用 publicPath h5.publicPath = h5.publicPath || base if (!h5.publicPath.endsWith('/')) { h5.publicPath = h5.publicPath + '/' } } else { // 其他模式,启用 base if (base.startsWith('./')) { // 在开发模式, publicPath 如果为 './' webpack-dev-server 匹配文件时会失败 h5.publicPath = base.substr(1) } else { h5.publicPath = base } } /* eslint-disable no-mixed-operators */ h5.template = h5.template && path.resolve(process.env.UNI_INPUT_DIR, h5.template) || path.resolve(require('./util') .getCLIContext(), 'public/index.html') h5.devServer = h5.devServer || {} // 插件修改 h5Options global.uniPlugin.configureH5.forEach(configureH5 => { configureH5(h5) }) return h5 } function isEnableUniPushV1 (manifestJson, platform) { if (!manifestJson) { manifestJson = getManifestJson() } if (isEnableUniPushV2(manifestJson, platform)) { return false } if (platform === 'app-plus') { const platformOptions = manifestJson[platform] const sdkConfigs = platformOptions && platformOptions.distribute && platformOptions.distribute.sdkConfigs const push = sdkConfigs && sdkConfigs.push if (push && hasOwn(push, 'unipush')) { return true } } return false } function isEnableUniPushV2 (manifestJson, platform) { if (!manifestJson) { manifestJson = getManifestJson() } const platformOptions = manifestJson[platform] if (platform === 'app-plus') { const sdkConfigs = platformOptions && platformOptions.distribute && platformOptions.distribute.sdkConfigs const unipush = sdkConfigs && sdkConfigs.push && sdkConfigs.push.unipush return ( /* eslint-disable eqeqeq */ unipush && unipush.version == '2' ) } return platformOptions && platformOptions.unipush && platformOptions.unipush.enable === true } function isEnableSecureNetwork (manifestJson, platform) { if (!manifestJson) { manifestJson = getManifestJson() } const platformOptions = manifestJson[platform] return platformOptions && platformOptions.secureNetwork && platformOptions.secureNetwork.enable === true } function isUniPushOffline (manifestJson) { if (!manifestJson) { manifestJson = getManifestJson() } const platformOptions = manifestJson['app-plus'] const sdkConfigs = platformOptions && platformOptions.distribute && platformOptions.distribute.sdkConfigs const unipush = sdkConfigs && sdkConfigs.push && sdkConfigs.push.unipush return unipush && unipush.offline === true } module.exports = { getManifestJson, parseManifestJson, getNetworkTimeout, getH5Options, isEnableUniPushV1, isEnableUniPushV2, isUniPushOffline, isEnableSecureNetwork }