当前位置: 首页 > news >正文

useConsole的封装,vue,react,htmlscript标签,通用

之前用了接近hack的方式实现了console的封装,目标是获取console.log函数的执行(调用栈所在位置)所在的代码行数。

例如以下代码,执行window.mylog(1)时候,console.log实际是在匿名的箭头函数()=>{//这里执行的}

const mylog = (...arg) => console.log(...arg)
mylog("window.mylog")

如果代码改为以下,

const mylog2={log:console.log
}
mylog2.log("test")

因为log返回的是conosle.log本身,并且它并没有在函数内执行,这里理解把console.log这个函数的内存地址赋值给mylog2.log,执行mylog2.log就是执行console.log

调试1

用谷歌调试工具,断点来查看演示上面效果:

mylog:

mylog2:

再次调试:

代码:

const mylog = () => {return {logx: (...arg) => {return console.log(...arg)}}
}const mylog2 = () => {return {logx: console.log}
}const MyLog = mylog();
const MyLog2 = mylog2();
MyLog.logx("window.mylog")
MyLog2.logx("window.mylog2")

 效果:

调试:

 结果:

mylog.logx执行的函数就是logx,而mylog2.logx执行的是console.log函数

封装hooks

const useConsole = function (...arg) {window.console.log("outside", this)return {log: window.console.log,warn: window.console.log,}
}

使用:

const Console = useConsole();
Console.log(111, 6666, 222)
Console.warn(111, 6666, 222)
Console.test(111, 6666, 222)

上面代码,vue,react,和script标签内都适用

弊端

打包发布时候,压缩代码插件无法移除Console.log或者Console.warn,需要手动配置,例如uglifyjs-webpack-plugin 就是配置pure_funcs属性

//  引入uglifyjs-webpack-plugin
const UglifyPlugin = require('uglifyjs-webpack-plugin')module.exports = {configureWebpack: (config) => {let optimization = {minimizer: [new UglifyPlugin({// 删除consoleuglifyOptions: {parallel: true,warnings: false,compress: {drop_console: false, //是否清除所有consoledrop_debugger: true,//是否清除debuggerpure_funcs: ['Console.log','Console.warn'] //drop_console 设置false,需要特殊清除的}}})]}Object.assign(config, {optimization})}
}

http://www.lryc.cn/news/263815.html

相关文章:

  • Azure Machine Learning - 提示工程高级技术
  • 七款创意项目管理软件解决方案推荐:高效项目管理与团队协作工具
  • 如何在公网环境下使用Potplayer访问本地群晖webdav中的影视资源
  • 数据可视化Seaborn
  • AWS S3相关配置笔记
  • linux:linux的小动物们(ubuntu)
  • 每日一题(LeetCode)----栈和队列--逆波兰表达式求值
  • 2023年第四届 “赣网杯” 网络安全大赛 gwb-web3 Write UP【PHP 临时函数名特性 + 绕过trim函数】
  • 软件设计师——软件工程(一)
  • 阿里云|人工智能(AI)技术解决方案
  • Axure中继器的使用
  • 猫罐头哪个牌子好性价比高?五大性价比高的品牌推荐
  • 宣布推出 ML.NET 3.0
  • 常见的排序算法---快速排序算法
  • hive企业级调优策略之分组聚合优化
  • 英码科技受邀参加2023计算产业生态大会,分享智慧轨道交通创新解决方案
  • 【openssl】Linux升级openssl-1.0.1到1.1.1
  • 美国联邦机动车安全标准-FMVSS
  • 龙迅LT6211B,HDMI1.4转LVDS,应用于AR/VR市场
  • 解决docker拉取镜像错误 missing signature key 问题
  • 倒计数器:CountDownLatch
  • vue内容渲染
  • Kafka为什么能高效读写数据
  • Flink系列之:Table API Connectors之Debezium
  • 【Python基础】文件读写
  • 电脑风扇控制软件Macs Fan Control mac支持多个型号
  • clangd:Couldn‘t build compiler instance
  • Springboot启动出现Error to process server push response的解决方法
  • P2P网络下分布式文件共享场景的测试
  • 计算机组成原理综合1