Vue跨端项目里怎么处理平台差异代码?
最近用 Vue + UniApp 做一个同时跑在微信小程序和 H5 上的项目,有些组件在不同平台表现不一样。比如我想在 H5 里用 div,在小程序里用 view,但写成条件编译又觉得维护麻烦。有没有更优雅的方式?
我试过用 process.env 平台判断,但好像在模板里不生效。现在临时这么写的:
<template>
<view v-if="isH5">H5 内容</view>
<view v-else>小程序内容</view>
</template>
<script>
export default {
computed: {
isH5() {
return uni.getSystemInfoSync().platform === 'h5';
}
}
}
</script>
但感觉每次都要写 computed 很啰嗦,有没有推荐的最佳实践?
这个是编译时处理的,不会增加运行时开销,比你用 v-if 判断优雅多了。
如果你觉得模板里写一堆条件编译乱,可以把平台差异抽成单独组件。比如搞个 CrossPlatform.vue:
用的时候就简单了:
至于 process.env 不生效的问题,UniApp 的环境变量是
uni.getSystemInfoSync().platform,不是 process.env,这俩不是一个东西。你可以在项目根目录建个utils/platform.js统一导出:然后在哪用哪导入,比 computed 里写重复逻辑强。
总的来说,能用条件编译解决的问题就用条件编译,侵入性最小。复杂点的逻辑抽组件,别在每个组件里重复判断平台。