如题,昨天博客突然崩了。当时是想尝试添加置顶功能,然后不知道为什么编译报错,页面整个404。然后把指定功能相关的代码删除了,但仍然报错。好奇怪!
用Mac的时间机器将它恢复到了15号的样子,但是编辑任意文件,提示文件已锁定,且不能解锁。试着生成网页,也提示没有权限。于是一气之下建立了一个新的博客文件夹,把所有东西复制一份过去,然后把原文件夹删除,cd到新目录再编辑里面的内容。比较惊讶的是删除原文件夹竟然没有提示权限不够!?
于是15号之后的修改都要重做了。花了一天时间,根据之前的笔记重新操作。但是!明明是一模一样的代码,却出现了新的bugs!
解决这些bugs的过程中参考了社友AliceZ的建议,并接受了社友茨月的科普,在此感谢。
Bug 1:切换到与系统偏好相反的颜色模式后,再切换页面,颜色模式跳回到和系统偏好一致
把夜间模式相关的代码改成和这个页面所写的一致(2023-10-19版本),结果出现了这个问题。以前从未有过。解决方案如下:
<script> (function() { const savedTheme = sessionStorage.getItem('theme') || localStorage.getItem('theme'); const userPrefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches; const useDarkMode = savedTheme ? savedTheme === 'dark' : userPrefersDark;
if (useDarkMode) { document.documentElement.classList.add('dark-theme'); } })();
document.addEventListener('DOMContentLoaded', function() { const themeToggleCheckbox = document.getElementById('switch_default'); const themeToggleMobile = document.getElementById('mobile-toggle-theme');
function updateButtonText(isDark) { themeToggleMobile.textContent = isDark ? '· Dark' : '· Light'; }
function toggleTheme() { const isDark = document.documentElement.classList.toggle('dark-theme'); document.body.classList.toggle('dark-theme', isDark); sessionStorage.setItem('theme', isDark ? 'dark' : 'light'); updateButtonText(isDark); }
const initialIsDark = document.documentElement.classList.contains('dark-theme'); updateButtonText(initialIsDark);
themeToggleCheckbox.addEventListener('change', function() { const isDark = themeToggleCheckbox.checked; document.documentElement.classList.toggle('dark-theme', isDark); document.body.classList.toggle('dark-theme', isDark); sessionStorage.setItem('theme', isDark ? 'dark' : 'light'); updateButtonText(isDark); });
themeToggleMobile.addEventListener('click', toggleTheme); }); </script>
|
中途发生了一件神奇的事情:ChatGPT给我生成的代码,Light和Dark刚好是反的……我手动更换了一下才正确。实在是非常奇怪,居然出现这样的失误?
Bug 2:菜单展开时将页面左上角的内容挤到一起
如图:
也是之前根本没出现过的问题!
最后的解决是让展开的菜单栏“浮在”左上角各个元素之上,让它直接覆盖在这些元素的上面而不是挤到它们:
@media screen and (max-width: 479px) { .navbar-mobile .menu { position: absolute; top: 80.66px; left: 0; width: 100%; background-color: #fff; z-index: 2; display: none; }
.navbar-mobile .menu.active { display: block; }
.navbar-mobile .navbar-header, .navbar-mobile .menu-toggle { z-index: 1; } }
|
其中80.66px是用网页检查器测量出来的上方元素的高度。这样修改后就没问题了。
反思
在这个事件中,我显然犯了一些错误。下面进行反思。
不要急着推倒重来
博客刚崩掉并且回滚代码恢复不了时,我的第一反应是用时间机器恢复到以前的版本。但是仔细想想,应该有更优的解决方案。首先,GitHub上有历史记录可以恢复!这个我根本就不知道,还是我男朋友告诉我的。但他告诉我时,我已经重建了博客文件夹,历史记录就没有了。
而且我发现我缺乏一种刨根问底的精神,觉得只要问题解决了就可以了。诚然,重建博客文件夹或许可以解决这个问题,但是一旦重建,我就没法知道究竟是什么原因导致博客崩掉的了。虽然据说程序员的原则是“能跑就行”,但是我不是程序员啊!我只是一个普通的爱好者!作为爱好的话,还是尝试深入理解其本质比较合适吧。
版本控制
在这两天之前我完全没听说过“版本控制”这个词……结果AliceZ和茨月都强调了版本控制的重要性。于是去查了,以下是GPT的解说:
Version control(版本控制)是一种记录文件更改历史的系统,以便将来可以查看特定版本的文件。版本控制系统对于软件开发项目特别有用,因为它们帮助开发团队跟踪和管理代码的更改。GitHub 是一个基于 Git 的在线版本控制系统,用于协作开发项目。
以下是如何在 GitHub 上进行版本控制的基本步骤:
1. 创建仓库(Repository)
- 访问 GitHub。
- 点击右上角的 “+”,然后选择 “New repository”。
- 填写仓库名称、描述等信息,然后点击 “Create repository”。
2. 克隆仓库(Clone)
- 找到你想要克隆的仓库。
- 点击 “Code” 按钮,复制 URL。
- 在本地计算机上打开命令行,输入以下命令:
3. 创建和切换分支(Branch)
- 在命令行中,进入你的项目目录。
- 输入以下命令创建并切换到新分支:
4. 添加和提交更改(Add & Commit)
- 对项目进行更改。
- 使用以下命令将更改添加到暂存区:
- 使用以下命令提交更改:
5. 推送更改到 GitHub(Push)
6. 创建拉取请求(Pull Request)
- 返回 GitHub 的仓库页面。
- 点击 “Pull requests”,然后点击 “New pull request”。
- 选择你推送的分支,然后点击 “Create pull request”。
7. 合并拉取请求(Merge Pull Request)
- 在拉取请求页面,点击 “Merge pull request”,然后点击 “Confirm merge”。
8. 拉取最新更改(Pull)
以上是 GitHub 版本控制的基本流程。根据项目和团队的不同,可能会有更多的步骤和策略,如代码审查、持续集成/持续部署(CI/CD)等。
大概意思是要做什么修改的时候,就切换到一个新分支,然后修改成功之后再把它拉回主分支吧。我学习!以后一定吸取教训!!
情绪管理
这一点就不多说了。昨天修了一天bug还没修好,大崩溃。今天修好了,心情就大好。感觉情绪忽上忽下的,总之还是没能成为一个成熟的大人。
寻求帮助
出现这两个新bug之后不好意思问男朋友具体的解决办法,毕竟他已经多年没写前端了(更正:他说他其实从来没写过前端……),问他会给他增加额外的学习成本。之后在闭社发嘟文吐槽,附上了问题描述,其实有暗戳戳期待会不会有人来帮忙。好在最后没有尴尬收场:茨月和AliceZ在评论区提出了观点和建议,让我学到很多,我也根据这些建议解决了部分问题。
发现我在寻求帮助的时候总是很别扭,一方面希望有人帮忙,另一方面又怕麻烦别人,于是就采取了这种迂回的方式求助(而不是比如直接给了解前端开发的社友发私信)。这跟我的性格有关,我的默认状态是不向任何人求助,自己独立解决问题。这在人生的早期比较好使,因为我当时算是同龄人中较聪明者,遇到问题的时候每每自己就给它解决了,不会造成很多困难。但是现在,我的能力渐渐触碰到天花板,遇到的无法独立解决的棘手问题越来越多,这种时候一个人内耗就不好使了。
所以真的很感谢GPT(的开发者)……虽然它经常不怎么靠谱,但是我可以一直问它而没有心理负担。但一直依赖GPT也不是办法,我总要找到一个适合我的向活人求助的方式,因为总会有需要这样的场合出现。所以还是得继续探索自我。