项目编译与部署
项目编译与部署
注意:该文档仅用于编译与部署该项目(我自己的文档库),或仅供开发人员参考。
 如果您想自己仿照该项目部署一个自己的在线笔记文档,请我提供的另一项目:LincDocs/Workflow,以及./网站框架介绍
编译相关
js内存满的错误
注意,扩展比较多,容易爆内存,出现报错:FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
参考:
- https://theme-hope.vuejs.press/zh/faq/common-error.html#fatal-error-xxx-javascript-heap-out-of-memory
 - https://stackoverflow.com/questions/53230823/fatal-error-ineffective-mark-compacts-near-heap-limit-allocation-failed-javas
 
CICD需要:构建文档时设置env
- name: 构建文档
  env:
    NODE_OPTIONS: --max_old_space_size=12288
  run: |-
    node -e 'console.log(v8.getHeapStatistics())'
    pnpm run docs:build
    > src/.vuepress/dist/.nojekyllWindows/Linux 需要:
# if Linux
export NODE_OPTIONS="--max-old-space-size=8192"
# if Windows
Set NODE_OPTIONS="--max-old-space-size=8192"
# if Windows PowerShell
$env:NODE_OPTIONS="--max-old-space-size=8192"
# if this is the instruction in the compilation
node --max-old-space-size=8192 xxxxxxx_original_instruction
# 验证内存 (我在VSCode用`$env`那条才成功了,其他不行)
node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))'
# 验证更多
node
> v8.getHeapStatistics()检查:https://github.com/watson/memory-usage
版本更新
pnpm dlx vp-update
不要单独更新,否则可能存在版本匹配问题
部署相关
Github Page
注意,这里使用了 git submodule 引入多个笔记库,其中部分笔记是在私有仓库的,通过 Github Action 使用 Secrets Tokens 引入。
 因此,异地部署时:需要可能修改子模块的链接,取消 private 仓库部分的笔记。或者手动指定 private 仓库的 token。
笔记库手动更新:
git submodule status
git submodule update --recursive --remote
# 或
git submodule foreach git pull origin main如果你不想使用我的子模块:
# 1. 删除.gitmodules文件里的对应条目
# 2. 移除子模块配置,这里 path/to/submodule 是你需要卸载的子模块的相对路径
git rm --cached path/to/submodule
# 3. 提交
git commit -m "Removed submodule <submodule name>"
# 4. 删除子模块目录
rm -rf path/to/submodule2024-11-02:
删除了子模块系统,依赖仅依赖脚本进行。
优点:
- 简化、解耦、方便项目的迁移与复用
 - 不太容易存在某个文档库需要强制依赖某个版本以上的编译系统的情况(即两者之间不存在的版本依赖),子模块优点在这不起效
 
Gitee Page
本来打算用 Gitee 镜像网站兼顾 Github 访问不稳的情况,不过 Gitee 官方现在已经停用了。
不过还是使用了 Gitee 来自动镜像 Github,进行备份。
Cloudflare Pages
为照顾 GitHub Page 无法稳定访问情况,备份了一个页面: https://linczero-github-io.pages.dev/
docs:build 的调试方式
由于 docs:build 有可能与 docs:dev 不一致,所以这里我是这样验证的:
- 先 
pnpm docs:build,此时生成产物在src/.vuepress/dist中 - 在这个路径下 
python -m http.server 8050 
笔记部分
笔记是子项目。现在这里说一下子项目会遇到的问题:
- 问题 
- 笔记在ty和ob中折返,经常会出现:No content changes found
 
 - 原因 
https://ggame.gledos.science/mkdocs/No_content_Changes_found.html
Obsidian 编辑、预览过的文件,会自动把 CRLF 替换成 LF,也就是说 Obsidian 不尊重原始文件的换行字符
 - 解决方法1 
- 无用,并不是这个原因
# 在git上禁用检查文件模式 git config core.filemode false 
 - 无用,并不是这个原因
 - 解决方法2 
- 删掉这些修改
git rm -r --cached . 
 - 删掉这些修改
 - 解决方法3 
- 不管了,把全部文件都转换成 LF 的,然后 VS Code 使用 LF 来编写
 
 
相关技术
- 主要框架:VuePress-Hope-Theme
 - 在此基础上,使用VuePress的Alias别名系统替换了多个组件,也自己写了一些相关的插件
 - 实现本地编辑与博客预览体验的一致性: 
- Obsidian插件迁移到VuePress,以在VuePress上使用 
- 如 AnyBlock,重写为Markdown-it插件的版本
 - 如 Markdown-it-obisidian-callout 的修改,替换掉自带的 alert 插件,使其更适应ob语法
 
 - VuePress插件迁移到Obsidian,以在Obsidian上使用 
- 如 Markdown-it-container 语法,重写为Obsidian插件的版本
 
 - 其他插件和组建 
- 仿文件资源管理的侧边栏组件
 - 一个钩子组的VuePress插件,用来和 AnyBlock 插件配合
 
 - 修改了部分样式和逻辑等
 
 - Obsidian插件迁移到VuePress,以在VuePress上使用