NPM卡住了同样的错误EISDIR:对目录的非法操作,错误读取(本机)

时间:2016-01-23 02:43:37

标签: node.js windows cmd npm file-permissions

无论我在哪个目录,以及在#34; npm"之后键入的内容,我都会遇到此错误。在cmd.exe中。这是npm-debug.log:

0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli   'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js' ]
2 info using npm@2.14.12
3 info using node@v4.2.6
4 verbose stack Error: EISDIR: illegal operation on a directory, read
4 verbose stack     at Error (native)
5 verbose cwd C:\Users\me
6 error Windows_NT 6.1.7601
7 error argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js"
8 error node v4.2.6
9 error npm  v2.14.12
10 error code EISDIR
11 error errno -4068
12 error syscall read
13 error eisdir EISDIR: illegal operation on a directory, read
13 error eisdir This is most likely not a problem with npm itself
13 error eisdir and is related to npm not being able to find a package.json in
13 error eisdir a package you are trying to install.
14 verbose exit [ -4068, true ]

我已多次尝试和卸载/重新安装nodejs,我甚至删除了C:\ Users \ me \ AppData \ Roaming中的npm和npm-cache文件夹。我不确定导致这种情况出了什么问题。一秒钟工作正常,现在我无法摆脱这个错误。日志中的解释没有意义,因为它在任何目录中都会出现此错误。我应该注意,以管理员身份运行命令提示符不会出现此错误。我在周五晚上把头发拉出来试图修好,任何帮助都会非常感激!

33 个答案:

答案 0 :(得分:119)

EISDIR 代表“错误,是目录”。这意味着NPM正在尝试对文件执行某些操作,但它是目录。在您的情况下,NPM正在尝试“读取”一个目录文件(行:4)。由于无法完成操作,因此会抛出错误。

要确保这里有三件事。

  1. 确保文件存在。如果没有,则需要创建它。 (如果NPM依赖于文件中的任何特定信息,则需要在那里获得该信息。)
  2. 确保它实际上是文件而不是目录。
  3. 它具有正确的权限。您可以使用“sudo chmod 777 FILE_NAME”更改文件以获得所有权限。 (小心:您正在为该文件上的每个人提供读取,写入和执行权限)

答案 1 :(得分:41)

我在更改某些npm设置时遇到了同样的问题。我用一个npm config set命令做错了,这增加了一行引用C:\Users\{User}\.npmrc的不存在的目录。从.npmrc手动删除该行后,问题就消失了。

答案 2 :(得分:11)

我将npm从6.4.1版本升级到6.5.0版本后,今天也遇到了同样的问题。我通过从node.js下载.pkg安装程序(建议大多数用户使用)来修复此问题,然后再运行它。

答案 3 :(得分:6)

我在Mac OS X上遇到了同样的问题(用自制软件安装),而.npmrc并不是唯一存储配置变量的节点。在/ usr / local / etc中有一个glocal npmrc配置文件,您必须使用此命令进行编辑:

sudo nano npmrc

删除ca=行,或者破坏安装的配置设置,保存该文件,再次尝试npm,你应该看到它正常工作。

答案 4 :(得分:6)

在我的情况下,我得到了“EISDIR:在目录上非法操作,读取”,因为在我的.angular-cli.json文件中我没有提供“脚本中的完整路径”

例如我有

"scripts": [
        "../node_modules/hammerjs",
        "../node_modules/moment"
      ],

实际上应该是

"scripts": [
        "../node_modules/hammerjs/hammer.min.js",
        "../node_modules/moment/min/moment.min.js"
      ],

答案 5 :(得分:5)

这些奇怪的错误最近发生在我的OSX计算机上。

我可以通过运行以下命令来帮助自己快速又肮脏:

class Word { constructor(englishWord, polishWord) { this.englishWord = englishWord this.polishWord = polishWord this.displayTranslation = () => { console.log(`${englishWord} = ${polishWord}`) } } } class Dictionary { constructor() { this.words = {} } addTranslation(word) { this.words[word.englishWord] = word.polishWord } getTranslation(english) { return this.words[english] } print() { for (let i = 0; i < this.words.length; i++) { this.words[i].displayTranslation() } } } const dictionary = new Dictionary() const intimate = new Word('intimate', 'intymny/prywatny') dictionary.addTranslation(intimate) console.log(dictionary.getTranslation('intimate'))

似乎有些东西弄乱了所有全局节点模块的访问权限。

答案 6 :(得分:1)

检查以确保从正确的目录运行npm install。

(例如,package.json文件可能是一个额外的目录。)

答案 7 :(得分:1)

如果您的问题与React Native包装程序相关联。尝试使用react-native start --reset-cache重置缓存。

答案 8 :(得分:0)

就我而言,我正在使用Windows 10西班牙语,该版本混合了英语和西班牙语目录名称。我的问题是,桌面目录的某些命令具有此名称,而其他命令则具有escritorio。我相信npm无法解决此问题。我的解决方案是简单地更改为从C:\开始的另一个目录,而不是我的主目录。

答案 9 :(得分:0)

对我来说这是因为我使用了错误的路径;它应该是文件的路径,但我错误地使用了目录的路径:

改变了这个:

path.resolve(__dirname, '../');

进入这个:

path.resolve(__dirname, '../.env')

答案 10 :(得分:0)

我也遇到过类似的问题。我使用以下命令设置cafile:

npm config set cafile PATH_TO_CERTIFICATE

我能够通过删除证书文件设置并设置strict-ssl = false来解决此问题。

答案 11 :(得分:0)

我通过从不支持符号链接的exFAT驱动器中移动目录来解决此问题。

我的exFat驱动器在osx和bootcamp Windows分区之间共享,因此当我尝试克隆并npm安装我的项目时,它失败了,但从未说明exFAT不支持此功能。

您可以安装一些驱动程序来添加符号链接功能,但是与运行简单的npm脚本相比,您必须手动进行很多设置。

答案 12 :(得分:0)

对于Mac OS: 如果直接从nodejs网站安装,则npmrc文件将位于 / usr / local / etc / npmrc 中。只需删除未定义的配置即可解决此问题。

答案 13 :(得分:0)

我刚刚删除了行

.babel('resources/assets/js/app.js')

使用vue.js的laravel 5.6。在webpack.mix.js中

答案 14 :(得分:0)

就我而言,C:\Users\{user}\AppData\local\npm文件是隐藏的,因此我无法找到和删除故障目录。花了我几天的时间来意识到这一点!

因此,请仔细检查以取消隐藏任何文件夹,以免您错过它们! Here's a link如果不知道怎么做。

答案 15 :(得分:0)

在Mac上:

每用户配置文件:〜/ .npmrc

答案 16 :(得分:0)

在我的情况下,问题是源文件夹(Windows 10)的名称中包含space字符。

答案 17 :(得分:0)

只需删除c:users>'username'中的.npmrc文件夹,然后尝试运行将被解决的命令即可!

答案 18 :(得分:0)

就我而言,我正在使用材料处理 angularv10。我更改了一些脚本文件,忘记删除脚本数组中的这些空“”

脚本:[.....bla, bla, etc, ""]

删除这些空的""

npm clear-cache --force

关闭和打开 vscode

成功了。

答案 19 :(得分:0)

我今天在使用 Visual Studio Code 时遇到了这个问题。我能够通过更正在我的用户设置中设置的更漂亮的配置路径来解决该问题。要验证您的路径设置,请选择文件 > 首选项 > 设置。在您的用户设置中,搜索漂亮配置文件的路径并确保它是正确的。

答案 20 :(得分:0)

执行完全卸载,包括删除路径等,并重新安装已解决了问题,但非常奇怪的问题。

How to completely remove node.js from Windows

答案 21 :(得分:0)

确保node_modules(和您的根package.json)不包含对npm的“ package.json”模块的引用。从node_modules删除package.json FOLDER为我解决了这个问题。

答案 22 :(得分:0)

对于我来说,这些步骤解决了我的问题:

  1. 终止npm流程(CTRL + C)
  2. 删除整个文件夹
  3. 创建新人
  4. 再次运行npm

答案 23 :(得分:0)

就我而言,我在使用以下命令在create-react-app中安装MAC (Mojave OS)时遇到了这个问题:

sudo npm install create-react-app -g

并出现如下错误:

npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/src/scheduler'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/src/symbol'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/src/testing'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/src/util'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/src/webSocket'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/symbol'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/testing'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/util'
npm WARN tar EISDIR: illegal operation on a directory, open '/usr/local/lib/node_modules/.staging/rxjs-a84420a7/webSocket'

我已阅读npm.community并尝试在没有sudo的情况下进行安装:

npm install create-react-app -g

它实际上解决了我的问题.. !!

答案 24 :(得分:0)

就我而言,我忘了传递它要查询的文件之一的 full 路径。传递完文件的完整路径后:)

答案 25 :(得分:0)

我到子文件夹中的node_modules的符号链接断开了

答案 26 :(得分:0)

请务必检查您的npm版本,以及是否存在问题。在撰写本文时,我遇到了同样的问题,并且发现我的npm版本(6.5)出现了问题。我必须卸载并重新安装npm 6.4.1版,然后所有内容才能再次正常运行。

答案 27 :(得分:0)

对我来说,修复是在目录名称后添加斜杠

答案 28 :(得分:0)

我知道这并不是特别询问永远的js ..但是google引导我到这里来......对我来说它就像一个结尾的斜线一样简单。

我刚改变了:

forever start -a -l /dev/null/ /var/www/node/my_file.js

要:

forever start -a -l /dev/null /var/www/node/my_file.js

错误消失了

答案 29 :(得分:0)

我有同样的问题。我的目录中有一个链接文件夹导致了问题。我添加了该文件夹以忽略列表,然后它按预期开始正常工作。

答案 30 :(得分:0)

在尝试删除.git文件夹之前有同样的问题。有效。我想这类问题可能有不同的原因。

答案 31 :(得分:0)

设置样板代码时遇到了类似的问题。它正在将我的bundle.js文件作为目录读取。如此处所述。 EISDIR意味着它的目录而不是文件。为了解决这个问题,我删除了文件并重新创建(最初是自动创建的)。 如果找不到该文件(因为它隐藏了),只需使用终端查找并删除它即可。

答案 32 :(得分:0)

我有这个问题。问题是gulp为我的源文件添加了一个依赖项,我认为npm试图打开它:

{
  "name": "name",
  "version": "2.0.0",
  "description": "",
  "main": "gulpfile.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "appname": "file://gulp",
    "gulp-concat": "^2.6.1",
    "gulp-electron": "^0.1.3",
    "gulp-shell": "^0.5.2",
    "gulp-uglify": "^2.0.0",
    "gulp-util": "^3.0.7",
    "node-7z": "^0.4.0"
  }
}

确保package.json文件中没有奇怪的引用。