mirror of
https://gitee.com/niucloud-team/niucloud.git
synced 2026-08-01 20:15:49 +00:00
84 lines
2.7 KiB
JavaScript
84 lines
2.7 KiB
JavaScript
/**
|
||
* uni-app 编译期特性开关(与 @dcloudio/uni-cli-shared initFeatures 默认值对齐)
|
||
* shared/vue.js 由 uni-h5-vue 打包,须注入这些 define,否则运行时报 ReferenceError
|
||
*/
|
||
const fs = require('fs')
|
||
const path = require('path')
|
||
const { ROOT } = require('./addon-utils.cjs')
|
||
|
||
function readRouterMode() {
|
||
try {
|
||
const manifest = JSON.parse(
|
||
fs.readFileSync(path.join(ROOT, 'src', 'manifest.json'), 'utf8')
|
||
)
|
||
return manifest?.h5?.router?.mode === 'history' ? 'history' : 'hash'
|
||
} catch {
|
||
return 'hash'
|
||
}
|
||
}
|
||
|
||
function getUniFeatureDefines() {
|
||
const routerMode = readRouterMode()
|
||
return {
|
||
__UNI_FEATURE_WX__: false,
|
||
__UNI_FEATURE_WXS__: true,
|
||
__UNI_FEATURE_RPX__: true,
|
||
__UNI_FEATURE_PROMISE__: false,
|
||
__UNI_FEATURE_LONGPRESS__: true,
|
||
__UNI_FEATURE_I18N_EN__: true,
|
||
__UNI_FEATURE_I18N_ES__: true,
|
||
__UNI_FEATURE_I18N_FR__: true,
|
||
__UNI_FEATURE_I18N_ZH_HANS__: true,
|
||
__UNI_FEATURE_I18N_ZH_HANT__: true,
|
||
__UNI_FEATURE_UNI_CLOUD__: false,
|
||
__UNI_FEATURE_I18N_LOCALE__: false,
|
||
__UNI_FEATURE_NVUE__: false,
|
||
__UNI_FEATURE_ROUTER_MODE__: routerMode,
|
||
__UNI_FEATURE_PAGES__: true,
|
||
__UNI_FEATURE_TABBAR__: true,
|
||
__UNI_FEATURE_TABBAR_MIDBUTTON__: false,
|
||
__UNI_FEATURE_TOPWINDOW__: false,
|
||
__UNI_FEATURE_LEFTWINDOW__: false,
|
||
__UNI_FEATURE_RIGHTWINDOW__: false,
|
||
__UNI_FEATURE_RESPONSIVE__: false,
|
||
__UNI_FEATURE_NAVIGATIONBAR__: true,
|
||
__UNI_FEATURE_PULL_DOWN_REFRESH__: false,
|
||
__UNI_FEATURE_NAVIGATIONBAR_BUTTONS__: true,
|
||
__UNI_FEATURE_NAVIGATIONBAR_SEARCHINPUT__: true,
|
||
__UNI_FEATURE_NAVIGATIONBAR_TRANSPARENT__: true
|
||
}
|
||
}
|
||
|
||
function toViteDefine(defines = getUniFeatureDefines()) {
|
||
const out = {}
|
||
for (const [key, val] of Object.entries(defines)) {
|
||
out[key] = key === '__UNI_FEATURE_ROUTER_MODE__' ? JSON.stringify(val) : val
|
||
}
|
||
return out
|
||
}
|
||
|
||
function patchUniDefinesInCode(code) {
|
||
let next = code
|
||
for (const [key, val] of Object.entries(getUniFeatureDefines())) {
|
||
const replacement = key === '__UNI_FEATURE_ROUTER_MODE__' ? JSON.stringify(val) : String(val)
|
||
if (next.includes(key)) next = next.split(key).join(replacement)
|
||
}
|
||
return next
|
||
}
|
||
|
||
function patchVueJsFile(filePath) {
|
||
if (!fs.existsSync(filePath)) return false
|
||
const code = fs.readFileSync(filePath, 'utf8')
|
||
const next = patchUniDefinesInCode(code)
|
||
if (next === code) return false
|
||
fs.writeFileSync(filePath, next, 'utf8')
|
||
return true
|
||
}
|
||
|
||
module.exports = {
|
||
getUniFeatureDefines,
|
||
toViteDefine,
|
||
patchUniDefinesInCode,
|
||
patchVueJsFile
|
||
}
|