普通视图

发现新文章,点击刷新页面。
昨天 — 2025年10月24日首页

项目实战4:奇思妙想console

作者 巧_
2025年10月24日 11:08

之前因为项目太多了console的打印,所以我直接在webpack上面进行配置,因为去掉的事一整个console而不是单纯的log导致,云服务器直接崩掉,我猜测原因是react内部有很多这种,如果直接全部去掉会太复杂,索性我后面改成log就好了,不过,最近鸡哥又给我出了一个新点子:

console全局控制:在原本状态下是不会显示log的,但是当你在控制台输入__enableLog() 的时候,他就会开始显示原本的log,这样就可以实现想要查看的时候就查看,不想查看的时候就不查看,但是这样还是有一个问题,就是刷新之后每次都要重新输入,唉,不过还是学一下:

    <Script
            id="console-log-override"
            strategy="beforeInteractive"
            dangerouslySetInnerHTML={{
                __html: `
                    (function() {
                        const originalConsoleLog = console.log;
                        let logEnabled = false;
                        console.log = function(...args) {
                            if (logEnabled) {
                                originalConsoleLog.apply(console, args);
                            }
                        };
                        window.__enableLog = function() {
                            logEnabled = true;
                            originalConsoleLog('Console logging enabled');
                        };
                        window.__disableLog = function() {
                            logEnabled = false;
                            originalConsoleLog('Console logging disabled');
                        };
                    })();
                `,
            }}
        />
        
        
        
        这段代码的核心作用是**重写浏览器的`console.log`方法**,实现日志输出的开关控制,默认关闭日志,可通过全局函数手动启用 / 禁用。下面分部分详细解释:
  • id="console-log-override":给脚本标签定义唯一标识,方便后续通过 DOM 操作定位该脚本。
  • strategy="beforeInteractive":这是 Next.js 等框架中的脚本加载策略,指定脚本在页面 "可交互前" 执行(优先于其他交互相关脚本),确保日志重写在其他代码调用console.log之前生效。
  • dangerouslySetInnerHTML={{ __html: '...' }}:React 中用于直接插入 HTML/JavaScript 代码的属性(因为 React 默认会转义文本,避免 XSS 风险,而dangerouslySetInnerHTML会跳过转义,直接执行内容,因此命名带 "dangerously" 提醒风险)。这里用于插入一段自定义的 JavaScript 逻辑。

2. 内部 JavaScript 逻辑(自执行函数)

代码核心是一个立即执行函数表达式(IIFE)(function() { ... })()。IIFE 的作用是创建一个私有作用域,避免内部变量(如logEnabled)污染全局环境。

(1)保存原始console.log方法

const originalConsoleLog = console.log;

先将浏览器原生的console.log方法保存到originalConsoleLog变量中,目的是后续需要时仍能调用原始的日志输出功能(避免重写后丢失原生能力)。

(2)定义日志开关变量

let logEnabled = false;

声明一个私有变量logEnabled(初始为false),用于控制日志是否输出:true表示启用,false表示禁用。

(3)重写console.log方法

console.log = function(...args) {
  if (logEnabled) {
    originalConsoleLog.apply(console, args);
  }
};
  • 用自定义函数覆盖原生的console.log
  • 新函数接收任意参数(...args,支持console.log(a, b, c)这样的多参数调用)。
  • 逻辑:只有当logEnabledtrue时,才通过originalConsoleLog.apply(console, args)调用原生日志方法输出内容;否则不执行任何操作(日志被 "屏蔽")。

(4)暴露全局控制函数

window.__enableLog = function() {
  logEnabled = true;
  originalConsoleLog('Console logging enabled');
};

window.__disableLog = function() {
  logEnabled = false;
  originalConsoleLog('Console logging disabled');
};
  • 向全局window对象挂载两个函数,用于手动控制日志开关:

    • __enableLog:将logEnabled设为true(启用日志),并通过原生console.log输出提示信息 "Console logging enabled"。

    • __disableLog:将logEnabled设为false(禁用日志),并输出提示 "Console logging disabled"。

项目实践3:一个冲突引起的灾难

作者 巧_
2025年10月24日 11:06

几天没写代码了,把项目主分支拉一下,发现一对冲突,想起来之前有人和我说过如果冲突不解决就会直接将本地的覆盖远程的,想着也没有写什么,就直接覆盖呗,忘记之前才格式化完prettier已经提交了,就点了一下右边可视化界面的按钮,把冲突提交直接放到了咱暂存提交上去了,导致冲突没解决,全是报错,还手欠的补了一刀,推到远程了,然后好死不死,有个伙伴还在我刚推完的基础上拉了一下,交了一个新的提交上去,天呐,好不容易直接完main,发现系统运行不了了呵呵,吓得我赶紧报备:

image.png

本来我是打算悄悄解决的,一顿慌乱操作下,没屁用,我那点知识在紧急情况下根本不值得一提: 首先,把reset和revert搞混了, 其次,命令一直记错,还有就是处理方式不对;

image.png

现在来统一科普一下:有现成的我就直接引用了,谢谢作者:blog.csdn.net/qq_41914181…

在我好不容易搞好之后,鸡哥和我说: image.png

image.png

下面是我常用的git记录,还有一些后续加上:

 git reset HEAD这通常用于撤销暂存区的修改(默认使用 --mixed 模式),即把已经 git add 到暂存区的内容退回到工作区,而工作区的文件内容不会被修改。但是如果是--hard模式,那就是工作区的也被撤销了

示例:如果你不小心 git add 了某个文件,想取消暂存,就可以用:

git reset HEAD <文件名>  # 撤销单个文件的暂存
git reset HEAD          # 撤销所有文件的暂存

ls -al 用长格式列出当前文件夹下的所有文件包括隐藏文件

image.png

pwd 就会输出当前目录的绝对路径

image.png

git commit -m "消息" 提交暂存区内容并设置消息

cp -r 循环复制目录及以下内容

vi  文件名 image.png

image.png

点击i进入插入模式,可以编辑

image.png

esc退出编辑模式进入命令模式,:wq保存并退出

 git add 后列出所有文件名(空格分隔):

git add file1.txt file2.js dir/file3.py  # 添加 file1.txt、file2.js、dir 目录下的 file3.py

git add . 会递归添加当前目录下所有修改过的文件、新文件(但会自动忽略 .gitignore 中指定的文件):

git add -u # 仅更新已跟踪文件的修改到暂存区

git mv <旧文件名> <新文件名>可一步完成重命名操作

解释一下,这个git log默认是本地仓库的当前分支的日志,如果git log --all就是当前本地分支和远程所有分支

git log --oneline简短描述提交的commit日志

image.png

git log -n4最近四个提交的commit日志

image.png

git branch -v本地有多少分支

git checkout -b teamp abcd 是 Git 中一个创建并切换新分支的命令,作用是 基于 abcd 这个 commit(或其他引用)创建名为 teamp 的新分支,并立即切换到该分支

cat 文件名输出文件名的所有内容

❌
❌