2012-11-19 254 views
15

我对Node.js很陌生,试图使用npm安装Flatiron,但它给我一个错误。npm安装错误ENOTDIR

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!  <[email protected]> 

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 

这里有什么问题?我没有任何线索。

回答

19

尝试

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

开始安装脚本之前,因为npm http 304 https://registry.npmjs.org/flatiron行指出,该模块从缓存中来。并且ENOTDIR也指出没有目录。因此,清空缓存将解决您的问题。

+0

不,我得到相同的错误,除了304现在更改为200,所以它不是从缓存来。 – Siddharth

+0

你可以尝试在没有'-g'的地方安装它吗?让我们看看它会如何。 –

+0

还没有运气。我做了'sudo npm cache clean',然后做了'sudo npm install flatiron',我得到了同样的错误。 – Siddharth

21

刚刚解决了这个问题。这是因为在主目录中有一个名为tmp的文件。

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

而且......如果你要安装NPM然后同样的错误和解决方案适用 - 删除~/tmp

+2

谢谢,这也解决了我的问题:-) –

0

下面是从源代码安装一个给定的释放无根 注步骤 - 这将安装nodejs,它可以为你提供节点以及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 

安装和的NodeJS作为故宫自己不是root执行这些命令(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所以节点可以找到模块的目录,否则 NPM安装XXX将会把新安装的模块到当前目录:

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

当您使用语法: NPM安装-g some_cool_module 全球的-g安装成DIR $ NODE_PATH,而不是你的$ PWD

安装的NodeJS给你NPM以及:

ls -la ${NODE_PARENT}/nodejs/bin 

安装使用全局标志-g将自动地把自己的 〜双星〜成以上bin目录后续模块......像browserify

现在把上面的三个出口XXX = YYY 命令到你的〜/ .bashrc或者其他一些这样设置你的环境

0

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