Compare commits

..

2 Commits

Author SHA1 Message Date
1536ffa319 chore(deps): update deps.
Some checks failed
🚀 Build and deploy by ftp / 🎉 Deploy (push) Failing after 44s
2023-07-09 06:19:21 +00:00
24aadfa329 chore: replace image url of blogs. 2023-07-09 06:04:45 +00:00
10 changed files with 2680 additions and 2396 deletions

View File

@ -4,10 +4,7 @@ date: '2022-10-17'
tags: ['Arch Linux', '环境搭建', 'VPS'] tags: ['Arch Linux', '环境搭建', 'VPS']
draft: false draft: false
summary: 有了上次快速安装步骤后,接下来就是使用这个环境了。要使用环境,首先需要做一些初始化操作。我的步骤适合我,但不一定适合你,只是记录和参考。 summary: 有了上次快速安装步骤后,接下来就是使用这个环境了。要使用环境,首先需要做一些初始化操作。我的步骤适合我,但不一定适合你,只是记录和参考。
images: images: ['https://minio.ivanli.cc/ivan-public/uPic/2023/RTr3IU.png']
[
'https://pan.ivanli.cc/api/v3/file/source/2238/archlinux-logo-light.png?sign=bWxqFFy3RUDT5UsWb4UD5byt-_L4h79wede3runRKFc%3D%3A0',
]
--- ---
## Docker ## Docker

View File

@ -4,10 +4,7 @@ date: '2022-10-28'
tags: ['PVE', 'PVE', 'DE', '环境搭建', 'Debian'] tags: ['PVE', 'PVE', 'DE', '环境搭建', 'Debian']
draft: false draft: false
summary: 虽然 PVE 宿主机不应该安装乱七八糟的东西,但是我穷,为了物尽其用,为了在主力电脑翻车时有一个立即可用的备用环境,所以还是安装了基础的桌面环境。现在的 Linux 桌面环境越来越好了,我选择安装 KDE Plasma 作为桌面环境,并且默认关闭,按需启用。 summary: 虽然 PVE 宿主机不应该安装乱七八糟的东西,但是我穷,为了物尽其用,为了在主力电脑翻车时有一个立即可用的备用环境,所以还是安装了基础的桌面环境。现在的 Linux 桌面环境越来越好了,我选择安装 KDE Plasma 作为桌面环境,并且默认关闭,按需启用。
images: images: ['https://minio.ivanli.cc/ivan-public/uPic/2023/qldEtP.png']
[
'https://pan.ivanli.cc/api/v3/file/source/2243/1200px-Kde_dragons.png?sign=yGZL9jYeVt53Ve43ddhHt_0EzVV2cW_WbxHc0dEcwWY%3D%3A0',
]
--- ---
## 前言 ## 前言
@ -160,7 +157,7 @@ ibus-setup
在打开的 GUI 中添加中文输入法,找到 Rime 并添加输入法: 在打开的 GUI 中添加中文输入法,找到 Rime 并添加输入法:
![rime](https://pan.ivanli.cc/api/v3/file/source/2241/Screen%20Capture_select-area_20221028225457.png?sign=XVrl7rPk4Gd7QRFBCCDGruB2L7V1bvxDpK9-v9pC0Nc%3D%3A0) ![rime](https://minio.ivanli.cc/ivan-public/uPic/2023/E4SWeR.png)
现在,新打开的软件应该能使用输入法了。像 Chrome 这类,关闭后还需要手动杀死进程后再打开才能使用。最简单的方法就是重启电脑啦~ 现在,新打开的软件应该能使用输入法了。像 Chrome 这类,关闭后还需要手动杀死进程后再打开才能使用。最简单的方法就是重启电脑啦~

View File

@ -4,10 +4,7 @@ date: '2022-09-23'
tags: ['Verdaccio', 'Self-Hosted', 'Docker', 'Caddy', 'registry', 'Node.js'] tags: ['Verdaccio', 'Self-Hosted', 'Docker', 'Caddy', 'registry', 'Node.js']
draft: false draft: false
summary: 作为靠着 JavaScript 生态吃饭的 Web 开发者,自建一个 Node regsitry 是很有必要的,我这次继续选择 Verdaccio 来搭建存储库。这次使用 Docker Compose 部署 Verdaccio并将 Caddy 用于反向代理该服务。 summary: 作为靠着 JavaScript 生态吃饭的 Web 开发者,自建一个 Node regsitry 是很有必要的,我这次继续选择 Verdaccio 来搭建存储库。这次使用 Docker Compose 部署 Verdaccio并将 Caddy 用于反向代理该服务。
images: images: ['https://minio.ivanli.cc/ivan-public/uPic/2023/3Dqijk.png']
[
'https://pan.ivanli.cc/api/v3/file/source/2233/verdaccio.png?sign=qpoeADXzbhHk2MY5CehgTftUJ67pnUj-Ylko9D5jscU%3D%3A0',
]
--- ---
## 为何自建存储库? ## 为何自建存储库?

View File

@ -4,10 +4,7 @@ date: '2022-10-17'
tags: ['Arch Linux', '环境搭建', 'VPS'] tags: ['Arch Linux', '环境搭建', 'VPS']
draft: false draft: false
summary: 又到了新装 Arch Linux 的日子了。这次又是温故而知新的机会,把之前写的笔记稍微整理了一下,在这里记录下教徒搭窝的备忘录。 summary: 又到了新装 Arch Linux 的日子了。这次又是温故而知新的机会,把之前写的笔记稍微整理了一下,在这里记录下教徒搭窝的备忘录。
images: images: ['https://minio.ivanli.cc/ivan-public/uPic/2023/RTr3IU.png']
[
'https://pan.ivanli.cc/api/v3/file/source/2238/archlinux-logo-light.png?sign=bWxqFFy3RUDT5UsWb4UD5byt-_L4h79wede3runRKFc%3D%3A0',
]
--- ---
## 起势 ## 起势

View File

@ -39,7 +39,7 @@ useEffect(() => {
### 在 React 18 的测试代码 ### 在 React 18 的测试代码
![React 18 Stricter Strict Mode.png](https://pan.ivanli.cc/api/v3/file/source/2753/React%2018%20Stricter%20Strict%20Mode.png?sign=ARQ8AVTh-NEaeJRypJlVokuUVhocPeaK8n7GRSDwqNw%3D%3A0) ![React 18 Stricter Strict Mode.png](https://minio.ivanli.cc/ivan-public/uPic/2023/TWVx7v.png)
代码:[Code Sandbox](https://codesandbox.io/p/sandbox/clever-cache-pm1oct?file=%2Fsrc%2FApp.tsx&selection=%5B%7B%22endColumn%22%3A20%2C%22endLineNumber%22%3A33%2C%22startColumn%22%3A20%2C%22startLineNumber%22%3A33%7D%5D) 代码:[Code Sandbox](https://codesandbox.io/p/sandbox/clever-cache-pm1oct?file=%2Fsrc%2FApp.tsx&selection=%5B%7B%22endColumn%22%3A20%2C%22endLineNumber%22%3A33%2C%22startColumn%22%3A20%2C%22startLineNumber%22%3A33%7D%5D)
@ -51,7 +51,7 @@ useEffect(() => {
2. `useEffect(() => /* */, [])`执行一此后,以新的严格模式的规则,调用了 `destructor` 后,进行了二次调用。 2. `useEffect(() => /* */, [])`执行一此后,以新的严格模式的规则,调用了 `destructor` 后,进行了二次调用。
在第 2 点中,两次 useEffect 都是使用同一个值,是因为严格模式的二次调用按钩子分别执行两次,所以 useMemo 两次的调用都完毕后,得到的值再被 useEffect 执行两次。我调整了一下代码,将测试代码复制了一份在后面,可以看到 “useMemo” 和 “useMemo 2” 先执行了一次,又再执行了一次,然后再到 “useEffect“ 和 “useEffect 2" 在第 2 点中,两次 useEffect 都是使用同一个值,是因为严格模式的二次调用按钩子分别执行两次,所以 useMemo 两次的调用都完毕后,得到的值再被 useEffect 执行两次。我调整了一下代码,将测试代码复制了一份在后面,可以看到 “useMemo” 和 “useMemo 2” 先执行了一次,又再执行了一次,然后再到 “useEffect“ 和 “useEffect 2"
![加倍快乐](https://pan.ivanli.cc/api/v3/file/source/2754/React%2018%20Stricter%20Strict%20Mode%202.png?sign=iYz9KP9uMuccRCesjqoRPKejEoUOj4FZfnBPt8kCXnQ%3D%3A0) ![加倍快乐](https://minio.ivanli.cc/ivan-public/uPic/2023/OwlDG6.png)
## 结论 ## 结论

View File

@ -1,4 +1,5 @@
import { visit, Parent } from 'unist-util-visit'; import { Parent } from 'unist';
import { visit } from 'unist-util-visit';
export default function remarkCodeTitles() { export default function remarkCodeTitles() {
return (tree: Parent & { lang?: string }) => return (tree: Parent & { lang?: string }) =>

View File

@ -1,6 +1,7 @@
import { VFile } from 'vfile'; import { VFile } from 'vfile';
import { visit, Parent } from 'unist-util-visit'; import { visit } from 'unist-util-visit';
import { load } from 'js-yaml'; import { load } from 'js-yaml';
import { Parent } from 'unist';
export default function extractFrontmatter() { export default function extractFrontmatter() {
return (tree: Parent, file: VFile) => { return (tree: Parent, file: VFile) => {

View File

@ -1,5 +1,5 @@
import { Literal } from 'unist'; import { Literal, Parent, Node } from 'unist';
import { visit, Parent, Node } from 'unist-util-visit'; import { visit } from 'unist-util-visit';
import sizeOf from 'image-size'; import sizeOf from 'image-size';
import fs from 'fs'; import fs from 'fs';

View File

@ -14,66 +14,66 @@
}, },
"dependencies": { "dependencies": {
"@fontsource/inter": "4.5.2", "@fontsource/inter": "4.5.2",
"@mailchimp/mailchimp_marketing": "^3.0.58", "@mailchimp/mailchimp_marketing": "^3.0.80",
"@next/bundle-analyzer": "12.0.9", "@next/bundle-analyzer": "12.0.9",
"@tailwindcss/forms": "^0.4.0", "@tailwindcss/forms": "^0.4.1",
"@tailwindcss/typography": "^0.5.0", "@tailwindcss/typography": "^0.5.9",
"autoprefixer": "^10.4.0", "autoprefixer": "^10.4.14",
"esbuild": "^0.13.13", "esbuild": "^0.13.15",
"github-slugger": "^1.3.0", "github-slugger": "^1.5.0",
"gray-matter": "^4.0.2", "gray-matter": "^4.0.3",
"image-size": "1.0.0", "image-size": "1.0.0",
"js-yaml": "^4.1.0", "js-yaml": "^4.1.0",
"mdx-bundler": "^8.0.0", "mdx-bundler": "^8.1.0",
"next": "=12.2.0", "next": "^12.2.0",
"next-themes": "^0.0.14", "next-themes": "^0.0.14",
"postcss": "^8.4.5", "postcss": "^8.4.25",
"preact": "^10.6.2", "preact": "^10.15.1",
"react": "17.0.2", "react": "17.0.2",
"react-commento": "^1.0.0", "react-commento": "^1.0.0",
"react-cusdis": "^2.1.3", "react-cusdis": "^2.1.3",
"react-dom": "17.0.2", "react-dom": "17.0.2",
"reading-time": "1.3.0", "reading-time": "1.3.0",
"rehype-autolink-headings": "^6.1.0", "rehype-autolink-headings": "^6.1.1",
"rehype-citation": "^0.2.0", "rehype-citation": "^0.2.5",
"rehype-katex": "^6.0.2", "rehype-katex": "^6.0.3",
"rehype-preset-minify": "6.0.0", "rehype-preset-minify": "6.0.0",
"rehype-prism-plus": "^1.1.3", "rehype-prism-plus": "^1.6.1",
"rehype-slug": "^5.0.0", "rehype-slug": "^5.1.0",
"remark-footnotes": "^4.0.1", "remark-footnotes": "^4.0.1",
"remark-gfm": "^3.0.1", "remark-gfm": "^3.0.1",
"remark-math": "^5.1.1", "remark-math": "^5.1.1",
"sharp": "^0.28.3", "sharp": "^0.28.3",
"smoothscroll-polyfill": "^0.4.4", "smoothscroll-polyfill": "^0.4.4",
"tailwindcss": "^3.0.18", "tailwindcss": "^3.3.2",
"unist-util-visit": "^4.0.0", "unist-util-visit": "^5.0.0",
"vfile": "^5.3.5" "vfile": "^5.3.7"
}, },
"devDependencies": { "devDependencies": {
"@svgr/webpack": "^6.1.2", "@svgr/webpack": "^6.5.1",
"@types/react": "^17.0.50", "@types/react": "^17.0.62",
"@types/tailwindcss": "^2.2.0", "@types/tailwindcss": "^2.2.4",
"@types/unist": "^2.0.6", "@types/unist": "^2.0.6",
"@typescript-eslint/eslint-plugin": "^4.28.1", "@typescript-eslint/eslint-plugin": "^4.33.0",
"@typescript-eslint/parser": "^4.28.1", "@typescript-eslint/parser": "^4.33.0",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"dedent": "^0.7.0", "dedent": "^0.7.0",
"eslint": "^7.29.0", "eslint": "^7.32.0",
"eslint-config-next": "12.0.9", "eslint-config-next": "12.0.9",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.8.0",
"eslint-plugin-prettier": "^3.3.1", "eslint-plugin-prettier": "^3.4.1",
"file-loader": "^6.0.0", "file-loader": "^6.2.0",
"globby": "11.0.3", "globby": "11.0.3",
"husky": "^6.0.0", "husky": "^6.0.0",
"inquirer": "^8.1.1", "inquirer": "^8.2.5",
"lint-staged": "^11.0.0", "lint-staged": "^11.2.6",
"next-export-optimize-images": "^2.0.0", "next-export-optimize-images": "^2.1.0",
"next-remote-watch": "^1.0.0", "next-remote-watch": "^1.0.0",
"prettier": "^2.5.1", "prettier": "^2.8.8",
"prettier-plugin-tailwindcss": "^0.1.4", "prettier-plugin-tailwindcss": "^0.1.13",
"socket.io": "^4.4.0", "socket.io": "^4.7.1",
"socket.io-client": "^4.4.0", "socket.io-client": "^4.7.1",
"typescript": "^4.6.1-rc" "typescript": "^4.9.5"
}, },
"lint-staged": { "lint-staged": {
"*.+(js|jsx|ts|tsx)": [ "*.+(js|jsx|ts|tsx)": [

File diff suppressed because it is too large Load Diff