if (uni.getSystemInfoSync().platform !== "devtools") { console.log = () => {}; console.info = () => {};
时间: 2025-04-05 09:04:45 浏览: 18
### 如何在 Uni-app 中屏蔽除开发者工具外其他平台的日志输出
为了实现仅在开发者工具环境下保留 `console.log` 输出,而在生产环境中或其他平台上屏蔽日志的功能,可以通过检测当前运行环境来动态控制日志行为。以下是具体方法:
#### 判断运行环境
Uni-app 提供了一个全局变量 `process.env.NODE_ENV` 来判断当前应用所处的环境模式。通过该变量可以区分开发环境和生产环境[^2]。
此外,还可以利用 `uni.getSystemInfoSync()` 方法获取设备信息并进一步确认是否处于调试器中。如果是在微信开发者工具中运行,则会返回特定字段表明这是模拟器环境[^3]。
#### 动态重写 console.log 行为
基于上述逻辑,可以在项目的入口文件(如 main.js 或 app.vue 的 created 钩子内),定义一个新的函数替代默认的 `console.log` 函数。只有当满足条件时才执行真正的打印操作;否则忽略调用或者记录到本地存储以便后续排查问题[^1]。
下面是一个完整的解决方案代码示例:
```javascript
// 在 main.js 文件顶部加入如下代码
if (process.env.NODE_ENV === 'production') {
const originalConsoleLog = console.log;
// 替换掉原始的 console.log 方法
console.log = function (...args) {
try {
let systemInfo = uni.getSystemInfoSync();
// 如果不是在微信开发者工具里则什么都不做
if (!/wechatdevtools/.test(systemInfo.platform)) {
return;
}
} catch(e){
// 捕获异常以防某些情况下无法获得系统信息导致崩溃
}
// 调试状态下仍然保持原有功能不变
originalConsoleLog.apply(console, args);
};
}
```
此脚本首先检查应用程序是否处于生产版本(`NODE_ENV==='production'`)。如果是的话,它将保存原有的 `console.log` 实现,并重新定义这个方法使得除非程序正在微信开发者工具内部运行之外的所有情况都不会触发任何输出动作[^4]。
以上方式不仅能够有效解决题目中的需求——即只允许在指定条件下显示日志消息,同时也遵循了良好的软件工程实践原则,比如封装性和可维护性等优点。
---
阅读全文
相关推荐



















