niucloud/uni-app/scripts/uni-feature-defines.cjs
wangchen14709853322 5ed9a0ba81 v2.0-beta-20260626
v2框架公测版测试流程请看v2.0-beta.md
2026-07-01 12:25:30 +08:00

84 lines
2.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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
}