[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"categories":3,"article-3":41,"comments-3":101},[4,11,17,23,29,35],{"_id":5,"name":6,"description":7,"cover":8,"created_at":9,"updated_at":9,"id":10},"6a2d2e4f58b719b2465af022","后端工程","NestJS \u002F Node.js 服务端：数据建模、缓存、鉴权、错误处理、对象存储等工程实践。","","2026-06-13T10:17:51.794Z",9,{"_id":12,"name":13,"description":14,"cover":8,"created_at":15,"updated_at":15,"id":16},"6a2d2e5058b719b2465af027","前端工程","Nuxt \u002F Vue \u002F React 前端与后台：SSR、运行时配置、组件与交互、请求层封装、语言与浏览器。","2026-06-13T10:17:52.535Z",10,{"_id":18,"name":19,"description":20,"cover":8,"created_at":21,"updated_at":21,"id":22},"6a2d2e5158b719b2465af02a","AI 工程","边缘 \u002F Serverless AI：RAG、Agent、LLM 调度、知识库同步与限流。","2026-06-13T10:17:53.139Z",11,{"_id":24,"name":25,"description":26,"cover":8,"created_at":27,"updated_at":27,"id":28},"6a2d2e5158b719b2465af02d","云原生与交付","Docker \u002F Nginx \u002F CI-CD \u002F 证书与边缘网络：从本地一键启动到生产零停机部署。","2026-06-13T10:17:53.362Z",12,{"_id":30,"name":31,"description":32,"cover":8,"created_at":33,"updated_at":33,"id":34},"6a2d2e5158b719b2465af030","架构与工程实践","跨切面主题：架构演进、解耦、可观测性、安全与开源治理。","2026-06-13T10:17:53.581Z",13,{"_id":36,"name":37,"description":38,"cover":8,"created_at":39,"updated_at":39,"id":40},"6a2d2e5158b719b2465af033","工具与效率","开发环境、编辑器、命令行与效率技巧：Vim \u002F Git \u002F Zsh \u002F macOS \u002F ffmpeg 等。","2026-06-13T10:17:53.804Z",14,{"_id":42,"id":43,"created_at":44,"updated_at":45,"title":46,"content":47,"description":48,"cover":8,"created_date":49,"category_id":40,"tag_ids":50,"author_ids":54,"public":55,"status":55,"star":55,"like":56,"views":57,"category":58,"tags":59,"authors":72,"related":79},"6a294c7a9fbda20eb7c62e03",3,"2022-12-11T07:39:27.000Z","2026-06-13T11:02:35.870Z","macOS 环境变量配置：搞清 PATH 与各 shell 配置文件的加载顺序","在 Mac 上配环境变量，最常见的困惑是：`export` 完当时能用，开个新终端又没了；或者改了 `.bash_profile` 毫无反应。根因都是一个——**没搞清当前 shell 是谁、它读哪个配置文件、什么时候读**。\n\n## 临时 vs 永久\n\n```bash\nexport PATH=\"$HOME\u002Fbin:$PATH\"   # 仅当前终端会话有效，关掉即失\n```\n\n`export` 只影响当前会话。要永久生效，必须写进 shell 的**启动配置文件**，每开终端自动加载。\n\n## 关键：你用的是 zsh 还是 bash\n\nmacOS Catalina 起默认 shell 是 **zsh**。先确认：\n\n```bash\necho $SHELL     # \u002Fbin\u002Fzsh 还是 \u002Fbin\u002Fbash\n```\n\n配置文件对应关系：\n\n| Shell | 交互式登录加载 | 常用持久化文件 |\n|---|---|---|\n| zsh | `~\u002F.zprofile` → `~\u002F.zshrc` | **`~\u002F.zshrc`** |\n| bash | `~\u002F.bash_profile` → `~\u002F.bashrc` | `~\u002F.bash_profile` |\n\n**最常见的错误**：用着 zsh，却把变量写进 `.bash_profile`——当然不生效。zsh 用户写 `~\u002F.zshrc` 就对了。\n\n## 正确持久化\n\n```bash\n# 编辑 zsh 配置\nvim ~\u002F.zshrc\n\n# 在文件末尾追加\nexport JAVA_HOME=\u002FLibrary\u002FJava\u002FJavaVirtualMachines\u002F...\nexport PATH=\"$JAVA_HOME\u002Fbin:$PATH\"\n\n# 立即生效（不用重开终端）\nsource ~\u002F.zshrc\n```\n\n## 理解 PATH\n\n`PATH` 是一串用冒号分隔的目录，shell 按**从左到右**的顺序在这些目录里找命令，**找到第一个就用**。所以：\n\n```bash\nexport PATH=\"$HOME\u002Fbin:$PATH\"   # 把自定义目录放前面 → 优先级更高\n```\n\n把目录放 `$PATH` 前面能覆盖系统同名命令（比如用自己装的新版 Python 覆盖系统自带）。查命令实际用的是哪个：\n\n```bash\nwhich python3      # 看最终解析到哪个路径\necho $PATH | tr ':' '\\n'   # 把 PATH 拆行看清顺序\n```\n\n## 常见坑\n\n- **写错文件**：zsh 用户改了 `.bash_profile`（见上）。\n- **重复追加**：每次 `source` 又 `export` 一遍，PATH 越积越长。改完用 `echo $PATH` 检查有没有重复。\n- **引号与空格**：路径含空格要加引号；`PATH` 赋值等号两边不能有空格。\n- **GUI 应用读不到**：从 Finder 启动的 App 不走终端配置文件，需要别的机制（如 `launchctl`），这是另一个话题。\n\n## 小结\n\nMac 配环境变量「不生效」十有八九是改错了文件。先 `echo $SHELL` 确认 shell，zsh 就写 `~\u002F.zshrc`、bash 写 `~\u002F.bash_profile`，改完 `source` 一下。理解 PATH「从左到右、取第一个」的查找规则，就能掌控命令优先级。","在 Mac 上配环境变量总是「这次生效下次又没了」？根因是没搞清不同 shell 的配置文件加载时机。讲清 PATH、zsh\u002Fbash 配置文件顺序与正确的持久化方式。","2018-05-22T00:00:00.000Z",[51,52,53],67,69,70,[55],1,0,94,{"_id":36,"name":37,"description":38,"cover":8,"created_at":39,"updated_at":39,"id":40},[60,64,68],{"_id":61,"name":62,"created_at":63,"updated_at":63,"id":51},"6a2d2e6a58b719b2465af0de","macOS","2026-06-13T10:18:18.034Z",{"_id":65,"name":66,"created_at":67,"updated_at":67,"id":52},"6a2d2e6d58b719b2465af0e4","命令行","2026-06-13T10:18:21.173Z",{"_id":69,"name":70,"created_at":71,"updated_at":71,"id":53},"6a2d2e6d58b719b2465af0e7","环境配置","2026-06-13T10:18:21.484Z",[73],{"name":74,"avatar":75,"email":76,"description":77,"role":78,"id":55},"Gavin","\u002Fblog\u002FWechatIMG133.jpeg","zzlwte@gmail.com","写代码的,也撸铁。白天搬 JavaScript 砖,晚上举铁,偶尔在这里写写技术沉淀和生活随想。",32,[80,84,87,90,93,97],{"id":81,"title":82,"cover":8,"created_date":83},5,"oh-my-zsh 疑难杂症与提速：插件、主题与启动慢排查","2021-06-30T00:00:00.000Z",{"id":16,"title":85,"cover":8,"created_date":86},"Vim 窗口管理：split、切换、缩放与标签页","2020-12-14T00:00:00.000Z",{"id":22,"title":88,"cover":8,"created_date":89},"Vim 问题集合：退出、中文乱码、复制到系统剪贴板等高频坑","2020-10-20T00:00:00.000Z",{"id":10,"title":91,"cover":8,"created_date":92},"Vim 前端开发插件整理：补全、LSP、文件树与格式化","2020-10-13T00:00:00.000Z",{"id":94,"title":95,"cover":8,"created_date":96},4,"HomeBrew 食用指南：macOS 的包管理器怎么用才顺手","2019-10-13T00:00:00.000Z",{"id":98,"title":99,"cover":8,"created_date":100},8,"Vim 工作流：模式、动作 + 文本对象的「语言」思维","2018-07-11T00:00:00.000Z",[]]