uni-app 使用全局或局部mixins,编译器发布后的小程序拿不到mixins里的data,直接运行却可拿到,这是什么情况

uni-app 使用全局或局部mixins,编译器发布后的小程序拿不到mixins里的data,直接运行却可拿到,这是什么情况

开发环境 版本号 项目创建方式
Windows Windows10 2004 HBuilderX
产品分类:uniapp/小程序/微信

### 示例代码:
```javascript
export default {  
    network: {  
        IS_DEBUG: process.env.NODE_ENV === 'development', //是否开发环境  
        RELEASE_URL: 'http://120.78.189.16', // 生产环境地址   
        DEBUG_URL: 'http://120.78.189.16', // 测试环境地址  
        REQUEST_TIMEOUT: 60000, // 请求超时时间  
    }  
}
import baseConfig from "./config.js"  
export default {  
    install(Vue) {  
        Vue.mixin({  
            data() {  
                return {  
                    BASE_URL: baseConfig.network.IS_DEBUG ? baseConfig.network.DEBUG_URL : baseConfig.network  
                        .BASE_URL  
                }  
            }     
        })  
    }  
}
import Vue from 'vue'  
import App from './App'  
import globalMixin from './common/js/globalMixin.js'  

Vue.config.productionTip = false  

App.mpType = 'app'  

const app = new Vue({  
    ...App  
})  
app.$mount()  

// 混入 全局mixin  
Vue.use(globalMixin)  

操作步骤:

点击菜单栏的【发行】->【小程序-微信】编译出来的小程序,无法取到mixins混入的data数据
直接运行到小程序模拟器的就可以取到mixins混入的data数据

预期结果:

点击菜单栏的【发行】->【小程序-微信】编译出来的小程序,也能取到mixins混入的data数据

实际结果:

发行的小程序无法取到mixins混入的data数据
运行的小程序无法取到mixins混入的data数据

bug描述:

uniapp 使用全局或者局部mixins,编译器发布后的小程序使用this.BASE_URL拿不到mixins里面的data,直接运行的小程序使用this.BASE_URL就可以拿到mixins里面的data,这是什么情况


更多关于uni-app 使用全局或局部mixins,编译器发布后的小程序拿不到mixins里的data,直接运行却可拿到,这是什么情况的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

是我的锅,一个字母写错了

更多关于uni-app 使用全局或局部mixins,编译器发布后的小程序拿不到mixins里的data,直接运行却可拿到,这是什么情况的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是一个在uni-app开发中常见的问题,通常与编译优化和mixin执行时机有关。

在开发环境下,uni-app编译器不会进行深度优化,mixin能够正常注入到组件实例中。但在生产环境构建时,编译器会启用tree-shaking等优化机制,可能导致mixin中的data属性被错误地移除。

从你的代码来看,问题可能出现在几个地方:

  1. mixin注册时机问题:你在创建Vue实例后才注册全局mixin,这可能导致部分组件无法正确接收到mixin。应该将Vue.use(globalMixin)移到创建Vue实例之前:
import Vue from 'vue'
import App from './App'
import globalMixin from './common/js/globalMixin.js'

Vue.config.productionTip = false

// 先注册mixin
Vue.use(globalMixin)

App.mpType = 'app'

const app = new Vue({
    ...App
})
app.$mount()
回到顶部