根据个人经验,根据您的错误消息illegal operation on a directory
,我猜想在执行 npm 时,它无法访问目录或文件。
正如其他人提到的,这通常是与 .npmrc 文件(通常位于用户的主目录 ~/.npmrc 中)相关的错误,该文件存储 npm 的自定义配置。值得注意的是,npm 可以有不同级别的配置:
- 每个项目
- per-user
- global
- built-in
您可以阅读有关 .npmrc 可能存在的不同位置的信息,以及与 npm 配置文件相关的其他文档npmrc 文档页面 https://docs.npmjs.com/files/npmrc.
如果您更愿意调查问题的根源而不仅仅是删除 .npmrc 文件,可以通过在文本编辑器(VS Code、记事本等)中打开 .npmrc 或发出以下命令来实现:
npm config edit
在文本编辑器中打开 .npmrc 后,您可以开始检查您拥有的任何配置。如果该文件为空或不存在,则您没有任何配置(在该级别),您可以继续调查另一个级别的 .npmrc 配置或问题的其他来源。
同样,如果您的 .npmrc 文件仅包含以分号 (;) 开头的文本行,则您没有活动配置,因为分号充当 .npmrc 中的注释(非活动)行。在某些情况下,比如你曾经跑步过npm config list
然后 npm 为您创建了一个示例 .npmrc 文件,其中包含要配置的可能设置的列表,但所有这些设置都处于非活动状态,因为它们前面有一个分号。下面是 npm 生成的文件的片段npm config list
is run:
;;;;
; npm userconfig file
; this is a simple ini-formatted file
; lines that start with semi-colons are comments.
; read `npm help config` for help on the various options
;;;;
; all options with default values
;;;;
; access=null
; allow-same-version=false
一旦您验证了 .npmrc 中的自定义配置处于活动状态,那么导致此错误的可能原因可能是您拥有的引用计算机上文件位置的任何自定义配置。就我而言,我为 .npmrc 中的 cacert 属性引用了 ca 证书的不完整路径:
损坏的配置:
; settings located in ~/.npmrc
cafile=C:/Users/kfrisbie/Documents/certs
请注意,上面的“certs”是对目录的引用,其中 npm 期望对文件的引用,因此当我更新路径以引用目录中想要的文件时,npm 再次开始正常运行。
固定配置:
; settings located in ~/.npmrc
; note, I was missing the name of the file in the certs directory
cafile=C:/Users/kfrisbie/Documents/certs/trusted_certs.pem