Closed LynxCatTheThird closed 1 year ago
首先明确一点:问题出现在以下两处:
不启用 swpp:
按照一级分类-二级分类-三级分类排序,文章与 Home 同样
启用 swpp:
按照231或321排序,文章与 Home 同样,翻阅源代码后发现相关HTML生成错误,但侧边栏与/categories/文件夹内结构均正确。
/categories/
依次尝试停用无关插件,发现问题出现在 swpp 身上。
最后一个正常时间点:https://github.com/LynxCatTheThird/lynxcatthethird.github.io/commit/af49e66340f814ceefebf592c1df306725dfe17a
第一个失常时间点:https://github.com/LynxCatTheThird/lynxcatthethird.github.io/commit/0811a3fb53468beaefede92c972b0fc3125cf0d0
最后一个正常时间点:https://person-m1ler6vkk-lynxcatthethird.vercel.app/
第一个失常时间点:https://person-88ldqv2g7-lynxcatthethird.vercel.app/
https://github.com/LynxCatTheThird/lynxcatthethird.github.io
https://github.com/LynxCatTheThird/web-now
title: 生物备战-难题分析(1) categories: - 科学与技术 - 生物 - 典题分析 tags: - 生物 - 典题分析 cover: "https://s2.hdslb.com/bfs/article/0b9dfd3e95fb368fe4f5e52534e6035910466bb3.jpg@1e_1c.webp" abbrlink: 409e60fe date: 2023-06-02 16:09:05 updated: 2023-06-02 16:09:05 katex: false mathjax: false mermaid: false description: 潍坊的题真难……
title: 类原生优化计划 tags: 刷机 categories: - 科学与技术 - 计算机 - 刷机 abbrlink: 4097fa9 date: 2023-07-08 16:27:55 updated: 2023-07-08 16:27:55 cover: https://s2.hdslb.com/bfs/article/eecc20f3eb6a274a1a46c985c1706df57bfde092.jpg@1e_1c.webp katex: false mathjax: false mermaid: false description: 类原生真好用~
package.json
{ "name": "hexo-site", "version": "0.0.0", "private": true, "scripts": { "build": "hexo generate", "clean": "hexo clean", "deploy": "hexo deploy", "server": "hexo server" }, "hexo": { "version": "6.3.0" }, "dependencies": { "@renbaoshuo/markdown-it-katex": "^2.0.2", "hexo": "^6.3.0", "hexo-abbrlink": "^2.2.1", "hexo-deployer-git": "^4.0.0", "hexo-filter-nofollow": "^2.0.2", "hexo-generator-archive": "^2.0.0", "hexo-generator-category": "^2.0.0", "hexo-generator-index": "^3.0.0", "hexo-generator-searchdb": "^1.4.1", "hexo-generator-tag": "^2.0.0", "hexo-minify": "^1.8.1", "hexo-pangu": "^0.2.2", "hexo-renderer-ejs": "^2.0.0", "hexo-renderer-markdown-it": "^7.1.0", "hexo-renderer-pug": "^3.0.0", "hexo-renderer-stylus": "^3.0.0", "hexo-server": "^3.0.0", "hexo-swpp": "^2.7.0", "hexo-tag-mmedia": "^1.2.1", "hexo-wordcount": "^6.0.1", "katex": "^0.16.8" } }
sw-rules.js
/** * 缓存列表 * @param clean 清理全站时是否删除其缓存 * @param match {function(URL)} 匹配规则 */ module.exports.cacheList = { // 这个 [simple] 就是规则的名称,该对象下可以包含多个规则,名称不影响缓存匹配 // 缓存匹配时按声明顺序进行匹配 simple: { // [clean] 项用于声明符合该规则的缓存在进行全局清理时是否清除 // 如果你无法确定是否需要声明为 false 的话写 true 即可 clean: true, // 该项用于匹配缓存,传入的参数是 URL 类型的,返回一个 boolean match: url => { const allowedHosts = [ 'lynxcatthethird.github.io', 'ara1145.github.io', 'lynx3.netlify.app', 'nl.lynxcatthethird.eu.org', 'nl.lctt.eu.org', 'lynx3-2.netlify.app', 'nl2.lynxcatthethird.eu.org', 'nl2.lctt.eu.org', 'lynx3.vercel.app', 'vc.lynxcatthethird.eu.org', 'vc.lctt.eu.org', 'lynx3-2.vercel.app', 'vc2.lynxcatthethird.eu.org', 'vc2.lctt.eu.org', 'lynx3.pages.dev', 'cf.lynxcatthethird.eu.org', 'cf.lctt.eu.org', 'lynx3-2.pages.dev', 'cf2.lynxcatthethird.eu.org', 'cf2.lctt.eu.org', 'localhost', '127.0.0.1' ]; if (!allowedHosts.includes(url.host)) { return false; } return url.pathname.match(/.(woff2|png|jpg|web|js|css|json|xml)$/); } } } module.exports.config = { /** * 与 ServiceWorker 有关的配置项 * 若想禁止插件自动生成 sw,此项填 false 即可 * @type ?Object|boolean */ serviceWorker: { /** * 逃生门 * @type number * @see https://kmar.top/posts/73014407/#6c7c33f0 */ escape: 0, /** * 缓存库名称 * 发布网站后 **切勿修改** 该配置项! * @type string */ cacheName: 'LCTTBlogCache', /** * 是否启用调试,启用后会在 sw 中插入一些辅助调试的代码,不建议开启 * @type boolean */ debug: false }, /** * 与 SW 注册有关的配置项 * 若想禁止插件向 html 中插入注册代码,此项填 false 即可 * @type Object|boolean */ register: { /** * sw 注册成功时的动作 * @type ?VoidFunction * */ onsuccess: () => console.log("Service Worker 注册成功"), /** * sw 注册失败时的动作 * ~若没有禁用 register,则该项为必填项,该项没有缺省值~ * @type ?VoidFunction */ onerror: () => console.error("ServiceWorker 注册失败,可能是您的浏览器不支持该功能。"), /** * 生成注册 SW 的 HTML 代码片段 * @param root {string} 网页根目录的 URL * @param hexoConfig {Object} Hexo 配置项 * @param pluginConfig {Object} SW 配置项 * @return {string} 一个 HTML 标签的字符串形式 */ builder: (root, hexoConfig, pluginConfig) => { const { onerror, onsuccess } = pluginConfig.register return `<script> (() => { const sw = navigator.serviceWorker const error = ${onerror.toString()} if (!sw?.register('${new URL(root).pathname}sw.js') ${onsuccess ? '?.then(' + onsuccess + ')' : ''} ?.catch(error) ) error() })() </script>` } }, /** * 与 DOM 端有关的配置 * 若想禁止插件自动生成 DOM 端 JS,此项填 false 即可 * @type Object|boolean */ dom: { /** * 缓存更新成功后触发的操作 * @type VoidFunction */ onsuccess: () => console.log("缓存更新成功") }, /** * 与插件生成的版本文件相关的配置项 * 该功能目前无法关闭 */ json: { /** * 更新缓存时允许更新的最大 HTML 页面数量,需要更新的 HTML 文件数量超过这个值后会清除所有 HTML 缓存 * @type number */ maxHtml: 15, /** * 版本文件(update.json)字符数量限制,插件将保证版本文件的字符数量不超过该值 * @type number */ charLimit: 1024, /** * 文件缓存匹配采取精确模式 * 关闭时更新缓存时仅匹配文件名称,如 https://kmar.top/simple/a/index.html 仅匹配 /a/index.html * 开启后更新缓存时将会匹配完整名称,如 https://kmar.top/simple/a/index.html 将匹配 /simple/a/index.html * 两种方式各有优劣,开启后会增加 update.json 的空间占用,但会提升精确度 * 如果网站内没有多级目录结构,就可以放心大胆的关闭了 * key 值为文件拓展名,default 用于指代所有未列出的拓展名以及没有拓展名的文件 */ precisionMode: { default: true }, /** * 是否合并指定项目 * 例如当 tags 为 true 时(假设标签目录为 https://kmar.top/tags/...) * 如果标签页存在更新,则直接匹配 https://kmar.top/tags/ 目录下的所有文件 * **推荐将此项开启** */ merge: { index: true, tags: true, archives: true, categories: true, /** * 这里填写目录名称列表(不带两边的斜杠) * @type string[] */ custom: ["link", "comment", "talk", "aboutme", "aboutsite", "thanks", "policy"] }, /** * 生成版本文件时忽略的文件 * 注:匹配的时候不附带域名,只有 pathname,匹配的内容一定是博客本地的文件 * @type RegExp[] */ exclude: [ /sw\.js$/ ] }, /** * 外部文件更新监听 * 该项缺省值为 false,若想允许插件监听外部文件的更新至少将值改为 `{}` * @type Object|boolean * @see https://kmar.top/posts/73014407/#c60b3060 */ external: { /** * 拉取网络文件时的超时时间 * @type number */ timeout: 1500, /** * 匹配 JS 代码中的 URL * 注意:字符串中的内容将被直接嵌入到正则表达式中,括号等特殊字符前需添加反斜杠,不允许使用括号 * 该项的缺省值为 `[]`,下方的值仅用于标明填写格式 * @see https://kmar.top/posts/73014407/#c60b3060 */ js: [ { head: 'getScript\(', tail: '\)' } ], /** * 某些外链只要 URL 不变其内容就一定不会变 * 可以通过正则表达式排除这些外链的文件内容监控,加快构建速度 * 注意:当某一个文件被跳过拉取后,这个文件中包含的 URL 也会被跳过 * @type RegExp[] */ skip: [], /** * 在构建过程中替换部分链接,该替换结果不会影响文件内容 * 该设置项是为了应对构建服务器在国外,但是网站内部分缓存资源无法在国外访问导致拉取时超时的问题 * 该项的缺省值为 `[]`,下方的值仅用于标明填写格式 * @type Object[] * @see https://kmar.top/posts/73014407/#4ea71e00 */ replace: [ { source: ['source0', 'source1'], dist: 'dist' } ] }, /** * 对 Hexo 中的变量进行排序 * 默认插件对 posts、tags、categories、pages 四个变量进行排序 * 排序规则为优先按照字符串长度排序,若长度一致按照字典序排序 * * 格式为 `name: value` * value 的可能值为:字符串、非负整数、false * 假定 Array<obj> 为要被排序的数据 * 当 value 为字符串和非负整数时,插件会以 `obj[value]` 的格式读取关键字 * 当 value 为 false 时,插件会直接以 `obj` 为关键字 * 注意:关键字必须为含有 length 属性且支持 < 操作符的类型 * 插件内置的 posts 规则如果用上面的格式写应该为: * posts: 'title' * 插件支持使用配置项覆盖插件内置规则 * * 该项缺省值为 `{}`,下方的值仅用于标明填写格式 */ sort: { keywords: false } }
module.exports.cacheList = {} module.exports.config = { register: { onerror: () => console.error("ServiceWorker 注册失败,可能是您的浏览器不支持该功能。") } }
2.7.1 开始默认不再对分类进行排序
首先明确一点:问题出现在以下两处:
问题描述
不启用 swpp:
按照一级分类-二级分类-三级分类排序,文章与 Home 同样
启用 swpp:
按照231或321排序,文章与 Home 同样,翻阅源代码后发现相关HTML生成错误,但侧边栏与
/categories/
文件夹内结构均正确。问题排查
依次尝试停用无关插件,发现问题出现在 swpp 身上。
变化历史
Github 存储库 Commit记录
最后一个正常时间点:https://github.com/LynxCatTheThird/lynxcatthethird.github.io/commit/af49e66340f814ceefebf592c1df306725dfe17a
第一个失常时间点:https://github.com/LynxCatTheThird/lynxcatthethird.github.io/commit/0811a3fb53468beaefede92c972b0fc3125cf0d0
Vercel 部署历史
最后一个正常时间点:https://person-m1ler6vkk-lynxcatthethird.vercel.app/
第一个失常时间点:https://person-88ldqv2g7-lynxcatthethird.vercel.app/
其它信息
存储库
https://github.com/LynxCatTheThird/lynxcatthethird.github.io
https://github.com/LynxCatTheThird/web-now
文章信息
package.json
sw-rules.js
(以下两个均出错)