npm安装错误ENOTDIR

18

我对Node.js非常陌生,试图使用npm安装Flatiron但出现错误。

sudo npm install flatiron -g

我明白了 -

npm http GET https://registry.npmjs.org/flatiron
npm http 304 https://registry.npmjs.org/flatiron
npm ERR! Error: ENOTDIR, mkdir '/home/siddharthsaha/tmp/npm-28554/1353323290836-0.20847953506745398'
npm ERR! If you need help, you may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Linux 3.2.0-24-generic
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "install" "flatiron" "-g"
npm ERR! cwd /home/siddharthsaha/denarit
npm ERR! node -v v0.8.14
npm ERR! npm -v 1.1.65
npm ERR! path /home/siddharthsaha/tmp/npm-28554/1353323290836-0.20847953506745398
npm ERR! code ENOTDIR
npm ERR! errno 27
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/siddharthsaha/denarit/npm-debug.log
npm ERR! not ok code 0

这里有什么问题?我毫无线索。

4个回答

24

问题已经解决。原因是在主目录下有一个名为tmp的文件。

rm -rf ~/tmp
sudo npm cache clear
sudo npm install -g node

另外,如果您正在尝试安装npm,则相同的错误和解决方案也适用- 删除〜/ tmp


21
sudo mkdir -p /home/siddharthsaha/tmp
sudo npm cache clear

在开始安装脚本之前,请注意:npm http 304 https://registry.npmjs.org/flatiron 这行代码表明该模块来自缓存。而且,ENOTDIR 表示没有目录。因此,清空缓存可以解决您的问题。


不,我得到了相同的错误,除了304现在变成了200,所以它不再来自缓存。 - Siddharth
还是不行。我执行了 sudo npm cache clean,然后又执行了 sudo npm install flatiron,但是还是出现了同样的错误。 - Siddharth
请告知您正在使用的Node版本。重新安装最新的Node版本可能会解决您的问题(在大多数情况下)。 - tolgaio
1
好的,那么尝试创建该目录 sudo mkdir -p /home/siddharthsaha/tmp,清除缓存并安装,这是我想到的最终解决方案。 - tolgaio
4
在我的情况下,我的主目录中有一个名为“tmp”的文件,所以我只需要重命名这个tmp文件,这样npm就可以将tmp创建为一个目录。 - therealklanni
显示剩余4条评论

0

我直接删除npm-debug.log文件,这样对我来说就没问题了。


0
以下是在没有root权限的情况下从源代码安装给定版本的步骤 注意 - 这将安装nodejs,它会为每个版本提供node和npm。
要开始,请删除之前的node.js和npm安装以及这些内容:
sudo mv ~/.npmrc ~/.npmrc_ignore
sudo mv ~/.npm   ~/.npm_ignore
sudo mv ~/tmp    ~/tmp_ignore
sudo mv ~/.npm-init.js ~/.npm-init.js_ignore

要以自己的身份而非root安装nodejs和npm,请执行以下命令(适用于OSX / Linux):

export NODE_PARENT=${HOME}/bin_0_10_32

mkdir ${NODE_PARENT}

从以下链接下载源代码:http://nodejs.org/download/

cd node-v0.xxxx

./configure   --prefix=${NODE_PARENT}/nodejs

make -j8
make install   #  IMPORTANT this is NOT using sudo
               # not wanted since installing into $USER owned $NODE_PARENT

这将把它放入由上面的--prefix定义的目录中

export PATH=${NODE_PARENT}/nodejs/bin:$PATH

定义环境变量NODE_PATH,这样Node才能找到模块的目录,否则npm install xxx将把新安装的模块放到当前目录中:

export NODE_PATH=${NODE_PARENT}/nodejs/lib/node_modules

当你使用语法:npm install -g some_cool_module时,-g用于全局安装模块到$NODE_PATH目录而不是当前目录$PWD。
nodejs的安装也会给你提供npm:
ls -la ${NODE_PARENT}/nodejs/bin

使用全局标志 -g 安装的后续模块将自动将它们的二进制文件放入上述 bin 目录中...例如 Browserify

现在将以上三个 export xxx=yyy 命令放入您的 ~/.bashrc 文件中或其他类似文件中,以便设置环境。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接