【问题标题】:npm install error ENOTDIRnpm 安装错误 ENOTDIR
【发布时间】:2012-11-19 11:25:06
【问题描述】:

我对 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

这里有什么问题?我不知道。

【问题讨论】:

    标签: node.js npm


    【解决方案1】:

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

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

    另外...如果您尝试安装 npm 则同样的错误和解决方案适用 - 删除 ~/tmp

    【讨论】:

      【解决方案2】:

      试试

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

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

      【讨论】:

      • 不,我得到了同样的错误,除了 304 现在更改为 200,因此它不再来自缓存。
      • 你可以尝试在没有-g的情况下安装它,意思是在本地。让我们看看它会如何发展。
      • 还是没有运气。我做了sudo npm cache clean,然后做了sudo npm install flatiron,我得到了同样的错误。
      • 好的,然后尝试创建该目录sudo mkdir -p /home/siddharthsaha/tmp,清除缓存并安装,这是我想出的最后一件事。
      • 在我的情况下,我的主目录中有一个名为“tmp”的文件,所以我只需要重命名这个 tmp 文件,以便 npm 可以将 tmp 创建为目录。
      【解决方案3】:

      以下是在没有 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
      

      以自己的身份安装 nodejs 和 npm,而不是 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 install xxx 会将新安装的模块放入当前目录:

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

      当你使用语法时: npm install -g some_cool_module 全局的 -g 将其安装到目录 $NODE_PATH 而不是您的 $PWD

      nodejs install 也为您提供 npm :

      ls -la ${NODE_PARENT}/nodejs/bin
      

      您使用全局标志 -g 安装的后续模块将自动放置 他们的 ~binaries~ 进入上面的 bin dir ... 就像 browserify

      现在把上面三个export xxx=yyy 命令到您的 ~/.bashrc 或类似的命令中,以便设置您的环境

      【讨论】:

        【解决方案4】:

        我直接删除了npm-debug.log的文件。 那我就没事了。

        【讨论】:

          猜你喜欢
          • 2022-08-02
          • 2023-03-30
          • 2012-02-09
          • 2022-01-10
          • 2016-04-03
          • 1970-01-01
          • 2014-11-21
          • 2015-10-24
          相关资源
          最近更新 更多