[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-npm-codex-command-not-found-fixes-zh":3,"article-related-npm-codex-command-not-found-fixes-zh":34,"series-industry-47c72ef9-bc7b-4179-a354-f28f20eaf7e0":80},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":26,"views":30,"created_at":31,"published_at":32,"topic_cluster_id":33},"47c72ef9-bc7b-4179-a354-f28f20eaf7e0","npm-codex-command-not-found-fixes-zh","npm 装完 Codex 找不到命令的 7 个修复","\u003Cp data-speakable=\"summary\">这篇文章整理了 7 种修复 \u003Ca href=\"\u002Ftag\u002Fnpm\">npm\u003C\u002Fa> 全局安装后找不到 \u003Ca href=\"\u002Ftag\u002Fcodex\">codex\u003C\u002Fa> 命令的方法。\u003C\u002Fp>\n\u003Cp>如果你已经装过 \u003Ca href=\"https:\u002F\u002Fwww.npmjs.com\u002F\">npm\u003C\u002Fa> 版 Codex，却还是报 “codex: command not found”，通常不是安装失败，而是 PATH、shell 配置或全局目录没对上。下面这 7 种办法能帮你快速定位问题，文中还会用到一个真实例子：把全局目录加入 PATH 后，再用 \u003Ccode>which codex\u003C\u002Fcode> 和 \u003Ccode>codex --version\u003C\u002Fcode> 验证。\u003C\u002Fp>\n\u003Ctable>\n  \u003Cthead>\n    \u003Ctr>\u003Cth>项目\u003C\u002Fth>\u003Cth>主要检查点\u003C\u002Fth>\u003Cth>适用场景\u003C\u002Fth>\u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\u003Ctd>PATH\u003C\u002Ftd>\u003Ctd>全局 bin 是否已加入\u003C\u002Ftd>\u003Ctd>最常见的命令找不到\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>shell 配置文件\u003C\u002Ftd>\u003Ctd>.zshrc \u002F .bashrc 是否写对\u003C\u002Ftd>\u003Ctd>切换 shell 后失效\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>真实路径\u003C\u002Ftd>\u003Ctd>是否用了占位符路径\u003C\u002Ftd>\u003Ctd>照抄教程后仍报错\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>npm prefix\u003C\u002Ftd>\u003Ctd>全局前缀与 bin 位置\u003C\u002Ftd>\u003Ctd>安装目录和预期不一致\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>终端会话\u003C\u002Ftd>\u003Ctd>是否重新打开窗口\u003C\u002Ftd>\u003Ctd>source 后仍不生效\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>全局安装状态\u003C\u002Ftd>\u003Ctd>包是否真装到全局\u003C\u002Ftd>\u003Ctd>安装被中断或装成本地\u003C\u002Ftd>\u003C\u002Ftr>\n    \u003Ctr>\u003Ctd>最终验收\u003C\u002Ftd>\u003Ctd>which 与 version 是否通过\u003C\u002Ftd>\u003Ctd>确认修复是否完成\u003C\u002Ftd>\u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Ch2>1. 把 npm 全局 bin 目录加进 PATH\u003C\u002Fh2>\n\u003Cp>这是最常见的修复。npm 把全局可执行文件放在一个 bin 目录里，如果这个目录没进 PATH，系统就算装好了也找不到 \u003Ccode>codex\u003C\u002Fcode>。你需要把实际的全局路径写进 shell 配置文件，而不是照抄别人的路径。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781967775019-xfsl.png\" alt=\"npm 装完 Codex 找不到命令的 7 个修复\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\n\u003Cp>在 macOS 和 zsh 里，常见做法是把命令追加到 \u003Ccode>~\u002F.zshrc\u003C\u002Fcode>，然后重新加载配置。关键点是先查出你的真实 npm 全局目录，再把它拼到 PATH 前面。\u003C\u002Fp>\n\u003Cul>\n  \u003Cli>\u003Ccode>npm root -g\u003C\u002Fcode> 查看全局包目录\u003C\u002Fli>\n  \u003Cli>\u003Ccode>npm bin -g\u003C\u002Fcode> 查看全局可执行文件目录\u003C\u002Fli>\n  \u003Cli>\u003Ccode>echo 'export PATH=\"\u002Fyour\u002Fpath\u002Fbin:$PATH\"' &gt;&gt; ~\u002F.zshrc\u003C\u002Fcode>\u003C\u002Fli>\n  \u003Cli>\u003Ccode>source ~\u002F.zshrc\u003C\u002Fcode> 立即生效\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>2. 确认你改的是当前 shell 的配置文件\u003C\u002Fh2>\n\u003Cp>很多人把 PATH 写进了 \u003Ccode>.bashrc\u003C\u002Fcode>，但实际打开的是 zsh；或者在登录 shell 里改了 \u003Ccode>.zprofile\u003C\u002Fcode>，却在交互 shell 里测试。结果就是配置看起来没错，命令还是找不到。先确认你当前用的是哪种 shell，再改对应文件。\u003C\u002Fp>\n\u003Cp>macOS 默认常见是 zsh，Linux 上可能是 bash 或 zsh。只要配置文件没对上，\u003Ccode>which codex\u003C\u002Fcode> 就不会返回预期路径。这个问题在新装系统、切换终端应用、远程登录时尤其常见。\u003C\u002Fp>\n\u003Cul>\n  \u003Cli>zsh 常改 \u003Ccode>~\u002F.zshrc\u003C\u002Fcode> 或 \u003Ccode>~\u002F.zprofile\u003C\u002Fcode>\u003C\u002Fli>\n  \u003Cli>bash 常改 \u003Ccode>~\u002F.bashrc\u003C\u002Fcode> 或 \u003Ccode>~\u002F.bash_profile\u003C\u002Fcode>\u003C\u002Fli>\n  \u003Cli>\u003Ccode>echo $SHELL\u003C\u002Fcode> 查看默认 shell\u003C\u002Fli>\n  \u003Cli>\u003Ccode>ps -p $$\u003C\u002Fcode> 查看当前 shell 进程\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>3. 用真实路径替换示例路径\u003C\u002Fh2>\n\u003Cp>文章里最容易踩坑的一点，是把示例里的 \u003Ccode>\u002FUsers\u002Fyou\u002F.npm-global\u003C\u002Fcode> 原样复制了。这个路径只是占位符，不能直接用。你的机器上可能是 \u003Ccode>\u002Fopt\u002Fhomebrew\u003C\u002Fcode>、\u003Ccode>\u002Fusr\u002Flocal\u003C\u002Fcode>，也可能是某个自定义目录。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781967768933-bzcv.png\" alt=\"npm 装完 Codex 找不到命令的 7 个修复\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\n\u003Cp>正确做法是先打印真实值，再写入配置。只要路径错一个字符，终端就不会找到 \u003Ccode>codex\u003C\u002Fcode>。这也是为什么很多人“明明按教程做了”，结果还是报错。\u003C\u002Fp>\n\u003Ccode>npm config get prefix\nnpm bin -g\nwhich node\nwhich npm\u003C\u002Fcode>\n\n\u003Ch2>4. 检查 npm 全局 prefix 是否指向你想要的位置\u003C\u002Fh2>\n\u003Cp>npm 的全局安装位置由 \u003Ccode>prefix\u003C\u002Fcode> 决定。若 prefix 指向一个你没有加进 PATH 的目录，或者目录本身权限不对，安装后就会出现“装上了但找不到”的情况。把 prefix 查出来，能快速判断问题是在安装阶段还是环境变量阶段。\u003C\u002Fp>\n\u003Cp>如果你曾经改过 npm 配置，或者用过 nvm、fnm、Volta 之类的 Node 管理工具，prefix 可能会和你预期不一样。此时不要急着重装，先把 prefix 和 bin 目录核对清楚。\u003C\u002Fp>\n\u003Cul>\n  \u003Cli>\u003Ccode>npm config get prefix\u003C\u002Fcode> 查看全局前缀\u003C\u002Fli>\n  \u003Cli>\u003Ccode>npm config list -l | grep prefix\u003C\u002Fcode> 进一步确认\u003C\u002Fli>\n  \u003Cli>确保 \u003Ccode>prefix\u002Fbin\u003C\u002Fcode> 在 PATH 中\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>5. 重新打开终端，别只停留在 source 之后\u003C\u002Fh2>\n\u003Cp>有些终端应用在当前窗口里读不到最新环境变量，尤其是在图形界面启动的终端、iTerm2、Terminal.app、VS \u003Ca href=\"\u002Fnews\u002Fvs-code-turns-folder-into-workspace-zh\">Code\u003C\u002Fa> 集成终端之间切换时。你执行了 \u003Ccode>source ~\u002F.zshrc\u003C\u002Fcode>，但当前会话仍然没刷新完整环境，这时重开一个新窗口最直接。\u003C\u002Fp>\n\u003Cp>如果重开终端后 \u003Ccode>which codex\u003C\u002Fcode> 仍然为空，再去看配置文件是否被其他脚本覆盖。很多时候问题并不在 npm，而在终端启动链路。\u003C\u002Fp>\n\u003Cul>\n  \u003Cli>关闭当前终端窗口后重新打开\u003C\u002Fli>\n  \u003Cli>在新窗口里运行 \u003Ccode>echo $PATH\u003C\u002Fcode>\u003C\u002Fli>\n  \u003Cli>再运行 \u003Ccode>which codex\u003C\u002Fcode> 和 \u003Ccode>codex --version\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>6. 检查 codex 是否真的安装到了全局\u003C\u002Fh2>\n\u003Cp>有时你以为自己做了全局安装，实际装成了本地依赖，或者安装过程被\u003Ca href=\"\u002Fnews\u002Fgoogle-ax-resumable-agent-runtime-zh\">代理\u003C\u002Fa>、权限、网络错误打断。先确认包本身存在，再去看命令是否暴露出来。这样能避免把时间浪费在 PATH 上，而\u003Ca href=\"\u002Fnews\u002Fai-bottleneck-power-not-chips-zh\">真正\u003C\u002Fa>的问题其实是安装没成功。\u003C\u002Fp>\n\u003Cp>如果包没装好，先重装；如果包装好了但命令还是不见，再回到前面的 PATH 和 prefix 排查。把“安装成功”和“命令可用”分开验证，效率会高很多。\u003C\u002Fp>\n\u003Ccode>npm list -g --depth=0\nnpm install -g codex\nnpm uninstall -g codex\nnpm install -g codex\u003C\u002Fcode>\n\n\u003Ch2>7. 用 which 和 version 做最终验收\u003C\u002Fh2>\n\u003Cp>修复之后不要只看“没报错”，要让终端明确告诉你命令已经可用。\u003Ccode>which codex\u003C\u002Fcode> 能返回可执行文件路径，\u003Ccode>codex --version\u003C\u002Fcode> 能确认程序真的能跑。两步一起做，能把“环境变量生效了”和“程序可执行了”同时验证掉。\u003C\u002Fp>\n\u003Cp>如果 \u003Ccode>which codex\u003C\u002Fcode> 仍然没有输出，就说明 PATH 还没对上；如果能找到路径但版本命令失败，说明可能是安装文件损坏或权限有问题。这个收尾检查能帮你把问题锁定到最后一层。\u003C\u002Fp>\n\u003Cul>\n  \u003Cli>\u003Ccode>which codex\u003C\u002Fcode> 验证路径\u003C\u002Fli>\n  \u003Cli>\u003Ccode>codex --version\u003C\u002Fcode> 验证可执行性\u003C\u002Fli>\n  \u003Cli>\u003Ccode>echo $PATH\u003C\u002Fcode> 验证环境变量内容\u003C\u002Fli>\n\u003C\u002Ful>\n\n\u003Ch2>哪种适合你\u003C\u002Fh2>\n\u003Cp>如果你刚装完就报错，先做第 1 条和第 3 条，通常最快见效。如果你是在 macOS 上用 zsh，第 2 条和第 5 条也很值得优先排查，因为 shell 配置和终端会话经常是根因。\u003C\u002Fp>\n\u003Cp>如果你已经确认 PATH 没问题，再看第 4 条和第 6 条，重点查 npm prefix 和全局安装状态。最后用第 7 条收尾，确保 \u003Ccode>which codex\u003C\u002Fcode> 和 \u003Ccode>codex --version\u003C\u002Fcode> 都能正常返回。\u003C\u002Fp>","7 种修复 npm 全局安装后出现“codex: command not found”的方法，先查 PATH、shell 配置，再核对 prefix 与全局安装状态。","zhuanlan.zhihu.com","https:\u002F\u002Fzhuanlan.zhihu.com\u002Fp\u002F2048778246280442761",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781967775019-xfsl.png","industry","zh","4ad06758-cfef-4333-867c-358b581925b2",[17,18,19,20,21,22,23,24,25],"npm","codex","command not found","PATH","shell配置","npm prefix","全局安装","zsh","bash",[27,28,29],"先查 PATH 和全局 bin 目录，命令找不到通常不是安装本身坏了。","要改对当前 shell 的配置文件，并用真实路径替换示例路径。","最后用 which codex 和 codex --version 验收，确认命令真的可用。",0,"2026-06-20T15:02:25.173546+00:00","2026-06-20T15:02:25.158+00:00","77527aec-3821-4e2e-8dc5-715dfa8a9e6a",{"tags":35,"relatedLang":39,"relatedPosts":43},[36,37],{"name":17,"slug":17},{"name":38,"slug":18},"Codex",{"id":15,"slug":40,"title":41,"language":42},"npm-codex-command-not-found-fixes-en","npm装完codex却找不到命令的7个修复","en",[44,50,56,62,68,74],{"id":45,"slug":46,"title":47,"cover_image":48,"image_url":48,"created_at":49,"category":13},"b3535602-a125-476a-bc1f-d7f0c86462f6","netsuite-agentic-workflow-definition-unpacked-zh","NetSuite 的 agentic workflow 怎麼拆","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781974094916-4ipn.png","2026-06-20T16:47:51.185288+00:00",{"id":51,"slug":52,"title":53,"cover_image":54,"image_url":54,"created_at":55,"category":13},"84a5a5fb-e97a-4b64-940f-9291081767fd","2027qs-aodao-bada-zhongjie-zenme-xuan-zh","2027QS澳洲八大中介怎么选","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781969564265-v1m8.png","2026-06-20T15:32:20.216246+00:00",{"id":57,"slug":58,"title":59,"cover_image":60,"image_url":60,"created_at":61,"category":13},"83fd4cc0-2c41-4362-81b8-3abc4f55abef","amd-intel-nvidia-reheat-engineering-cost-guide-zh","AMD、Intel、Nvidia 炒冷饭代价清单","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781966869422-5dza.png","2026-06-20T14:47:23.939538+00:00",{"id":63,"slug":64,"title":65,"cover_image":66,"image_url":66,"created_at":67,"category":13},"dcc6cc07-3170-450a-9108-e542ef9496e9","openai-internal-secondary-sales-talent-war-zh","OpenAI 的内部售股不是慷慨，是留人战争","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781965067815-sq5w.png","2026-06-20T14:17:19.663638+00:00",{"id":69,"slug":70,"title":71,"cover_image":72,"image_url":72,"created_at":73,"category":13},"6c62c956-c915-4561-8335-b2715e245cee","anthropic-fable-5-ban-ai-investors-zh","Anthropic Fable 5禁令衝擊AI投資人","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781964172402-gpe9.png","2026-06-20T14:02:26.558815+00:00",{"id":75,"slug":76,"title":77,"cover_image":78,"image_url":78,"created_at":79,"category":13},"63db42c1-ac26-4732-bdd8-5618fce6755a","army-contract-opportunities-ai-air-defense-zh","Army AI 與防空合約判讀指南","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781962368628-ro3e.png","2026-06-20T13:32:21.207726+00:00",[81,86,91,96,101,106,111,116,121,126],{"id":82,"slug":83,"title":84,"created_at":85},"ee073da7-28b3-4752-a319-5a501459fb87","ai-in-2026-what-actually-matters-now-zh","2026 AI 真正重要的事","2026-03-26T07:09:12.008134+00:00",{"id":87,"slug":88,"title":89,"created_at":90},"83bd1795-8548-44c9-9a7e-de50a0923f71","trump-ai-framework-power-speech-state-preemption-zh","川普 AI 框架瞄準電力、言論與州權","2026-03-26T07:12:18.695466+00:00",{"id":92,"slug":93,"title":94,"created_at":95},"ea6be18b-c903-4e54-97b7-5f7447a612e0","nvidia-gtc-2026-big-ai-announcements-zh","NVIDIA GTC 2026 重點拆解","2026-03-26T07:14:26.62638+00:00",{"id":97,"slug":98,"title":99,"created_at":100},"4bcec76f-4c36-4daa-909f-54cd702f7c93","claude-users-spreading-out-and-getting-better-zh","Claude 用戶更分散，也更會用","2026-03-26T07:22:52.325888+00:00",{"id":102,"slug":103,"title":104,"created_at":105},"bd903b15-2473-4178-9789-b7557816e535","openclaw-raises-hard-question-for-ai-models-zh","OpenClaw 逼問 AI 模型價值","2026-03-26T07:24:54.707486+00:00",{"id":107,"slug":108,"title":109,"created_at":110},"eeac6b9e-ad9d-4831-8eec-8bba3f9bca6a","gap-google-gemini-checkout-fashion-search-zh","Gap 把結帳搬進 Gemini","2026-03-26T07:28:23.937768+00:00",{"id":112,"slug":113,"title":114,"created_at":115},"0740e53f-605d-4d57-8601-c10beb126f3c","google-pushes-gemini-transition-to-march-2026-zh","Google 把 Gemini 轉換延到 2026 年 3…","2026-03-26T07:30:12.825269+00:00",{"id":117,"slug":118,"title":119,"created_at":120},"e660d801-2421-4529-8fa9-86b82b066990","metas-llama-4-benchmark-scandal-gets-worse-zh","Meta Llama 4 分數風波又擴大","2026-03-26T07:34:21.156421+00:00",{"id":122,"slug":123,"title":124,"created_at":125},"183f9e7c-e143-40bb-a6d5-67ba84a3a8bc","accenture-mistral-ai-sovereign-enterprise-deal-zh","Accenture 攜手 Mistral AI 賣主權 AI","2026-03-26T07:38:14.818906+00:00",{"id":127,"slug":128,"title":129,"created_at":130},"191d9b1b-768a-478c-978c-dd7431a38149","mistral-ai-faces-its-hardest-year-yet-zh","Mistral AI 迎來最硬的一年","2026-03-26T07:40:23.716374+00:00"]