<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>EPERM on Jiangwan&#39;s Blog</title>
        <link>https://jiangwan.ink/tags/eperm/</link>
        <description>Recent content in EPERM on Jiangwan&#39;s Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Fri, 01 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jiangwan.ink/tags/eperm/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Windows 下 npm 全局安装 EPERM 报错的排查与解决</title>
        <link>https://jiangwan.ink/p/npm-eperm-error-windows/</link>
        <pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate>
        
        <guid>https://jiangwan.ink/p/npm-eperm-error-windows/</guid>
        <description>&lt;p&gt;在 Windows 环境下配置开发环境时，权限问题往往是阻碍流程的一道坎。当你兴致勃勃地准备全局安装一个 npm 包（例如 &lt;code&gt;@openai/codex&lt;/code&gt; 或常见的脚手架工具）时，终端却甩出一长串包含 &lt;code&gt;npm error code EPERM&lt;/code&gt; 的红色报错。&lt;/p&gt;
&lt;p&gt;这个问题并非由于包本身存在缺陷，而是操作系统的权限控制机制与 npm 的默认路径设置发生了冲突。本文将复盘这一报错的触发原因，并给出标准的解决方案。&lt;/p&gt;
&lt;h2 id=&#34;一问题现场&#34;&gt;一、问题现场
&lt;/h2&gt;&lt;p&gt;在普通终端（未以管理员身份运行）执行全局安装命令时：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g @openai/codex
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你可能会遇到如下核心报错信息：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm error code EPERM
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm error syscall open
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm error path D:\Program Files\nodejs\node_cache\_cacache\tmp\...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm error errno EPERM
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm error The operation was rejected by your operating system.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm error It&amp;#39;s possible that the file was already in use...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;二报错溯源为什么会引发-eperm&#34;&gt;二、报错溯源：为什么会引发 EPERM？
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;EPERM&lt;/code&gt; 全称为 Error Permission（权限错误）。仔细观察报错日志中的 &lt;code&gt;path&lt;/code&gt; 字段，可以发现 npm 试图向 &lt;code&gt;D:\Program Files\nodejs\node_cache\...&lt;/code&gt; 目录下写入缓存文件。&lt;/p&gt;
&lt;p&gt;如果你的 Node.js 安装在 &lt;code&gt;Program Files&lt;/code&gt; 目录下，Windows 的 UAC（用户账户控制）会对此类系统级目录进行严格的写权限保护。在非管理员模式下，终端没有向该目录新建或修改文件的权限，从而触发了系统的拒绝访问操作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;核心冲突在于：&lt;/strong&gt; npm 默认会将全局包（&lt;code&gt;prefix&lt;/code&gt;）和缓存（&lt;code&gt;cache&lt;/code&gt;）存放在 Node.js 的安装目录下。&lt;/p&gt;
&lt;h2 id=&#34;三解决方案重定向全局与缓存目录&#34;&gt;三、解决方案：重定向全局与缓存目录
&lt;/h2&gt;&lt;p&gt;最彻底的做法不是每次都去右键“以管理员身份运行”，而是将 npm 的全局安装路径和缓存路径迁移到一个普通的、属于当前用户的文件夹中。&lt;/p&gt;
&lt;h3 id=&#34;1-建立自定义配置目录&#34;&gt;1. 建立自定义配置目录
&lt;/h3&gt;&lt;p&gt;在你习惯存放开发配置的非系统盘（如 D 盘），新建专用的 npm 目录，并分别建立 &lt;code&gt;global&lt;/code&gt; 和 &lt;code&gt;cache&lt;/code&gt; 文件夹。打开终端执行：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir D:&lt;span class=&#34;se&#34;&gt;\D&lt;/span&gt;evConfig&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;pm&lt;span class=&#34;se&#34;&gt;\g&lt;/span&gt;lobal
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir D:&lt;span class=&#34;se&#34;&gt;\D&lt;/span&gt;evConfig&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;pm&lt;span class=&#34;se&#34;&gt;\c&lt;/span&gt;ache
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-修改-npm-默认配置&#34;&gt;2. 修改 npm 默认配置
&lt;/h3&gt;&lt;p&gt;接着，告诉 npm 以后把东西都存放到这两个新目录中：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm config &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; prefix &lt;span class=&#34;s2&#34;&gt;&amp;#34;D:\DevConfig\npm\global&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm config &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; cache &lt;span class=&#34;s2&#34;&gt;&amp;#34;D:\DevConfig\npm\cache&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-验证配置是否生效&#34;&gt;3. 验证配置是否生效
&lt;/h3&gt;&lt;p&gt;执行以下命令，确认路径已经成功修改为你设置的目录：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm config get prefix
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm config get cache
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果输出的都是 &lt;code&gt;D:\DevConfig\npm&lt;/code&gt; 下的路径，说明配置成功。&lt;/p&gt;
&lt;h3 id=&#34;4-暴露全局命令到系统环境&#34;&gt;4. 暴露全局命令到系统环境
&lt;/h3&gt;&lt;p&gt;这是最关键且容易遗漏的一步。路径修改后，npm 会把全局包（如 &lt;code&gt;codex&lt;/code&gt;、&lt;code&gt;vue-cli&lt;/code&gt;）安装到新目录中，但 Windows 系统并不知道这个新地址，导致你安装后依然提示“找不到命令”。你必须将其添加到系统的环境变量中：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;按下 &lt;code&gt;Win + S&lt;/code&gt; 搜索“&lt;strong&gt;环境变量&lt;/strong&gt;”，选择“&lt;strong&gt;编辑系统环境变量&lt;/strong&gt;”。&lt;/li&gt;
&lt;li&gt;在弹出的窗口中点击右下角的“&lt;strong&gt;环境变量&lt;/strong&gt;”按钮。&lt;/li&gt;
&lt;li&gt;在上方“&lt;strong&gt;用户变量&lt;/strong&gt;”区域找到 &lt;code&gt;Path&lt;/code&gt;，双击编辑。&lt;/li&gt;
&lt;li&gt;点击“新建”，填入你刚刚设置的 global 路径：&lt;code&gt;D:\DevConfig\npm\global&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;一路点击“确定”保存。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;5-重启终端测试&#34;&gt;5. 重启终端测试
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;注意：环境变量修改后，必须重启终端（CMD 或 PowerShell）才能生效。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;重新打开终端，再次执行全局安装命令：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g @openai/codex
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;此时你应该能看到进度条顺畅跑完，解决 &lt;code&gt;EPERM&lt;/code&gt; 问题！&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
