npm安装错误:ENOENT,chmod

我正在尝试全局安装刚发布的npm模块。 每次我尝试安装,无论从npm或文件夹,我得到这个错误。

npm ERR! Error: ENOENT, chmod '/usr/local/lib/node_modules/takeapeek/lib/cmd.js' 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.8.0-19-generic npm ERR! command "node" "/usr/local/bin/npm" "install" "-g" "takeapeek" npm ERR! cwd /home/giodamlio npm ERR! node -v v0.10.6 npm ERR! npm -v 1.3.6 npm ERR! path /usr/local/lib/node_modules/takeapeek/lib/cmd.js npm ERR! code ENOENT npm ERR! errno 34 npm ERR! npm ERR! Additional logging details can be found in: npm ERR! /home/giodamlio/npm-debug.log npm ERR! not ok code 0 

我正在使用sudo,我有三重检查包中的一切,一切都应该工作。 我做了一些四处搜寻,并看到一些similer案件都没有解决。 这是我试过的。

  • 升级npm( sudo npm install -g npm
  • 清除全局npmcaching( sudo npm cache clear
  • 清除用户npmcaching( npm cache clear

我注意到,错误必须与我链接到path的文件,特别是当npm试图做一个chmod。 这应该不是一个问题,我的lib/cli.js具有正常的权限,并且在安装过程中npm拥有超级用户权限。

通过npm文档挖掘后,我发现一个选项,将停止npm制作bin链接( --no-bin-links ),当我尝试安装它,它工作正常。

那么交易是什么? 这是一些奇怪的边缘案例缺陷 ,没有解决scheme吗?

编辑:作为参考, 这里是我上传的模块

好吧,它看起来像NPM使用.gitignore作为.npmignore文件的基础,因此忽略/lib 。 如果您将一个空白的.npmignore文件添加到您的应用程序的根目录,一切都应该工作。

– 有关此行为的更多信息,请访问: https : //docs.npmjs.com/misc/developers#keeping-files-out-of-your-package

我遇到了类似的问题,

 npm cache clean 

解决了它。

当我尝试运行npm install -g bower时,这个问题在Mac上出现了。 这是给我一些错误,因为无法find像优雅的fs的东西。 我不知道我最初是如何安装npm的,但是看起来也许它是用节点使用自制软件的。 我第一次跑

 brew uninstall node 

这从我的path中删除nodenpm 。 从那里我刚刚重新安装它

 brew install node 

当它完成时,我有我的path上的nodenpm ,我能够运行

 rm -rf ~/.npm npm install -g bower 

这然后成功安装了凉亭。

更新酿造公式和升级安装似乎没有为我工作,我不知道为什么。 删除.npm文件夹是其他人已经工作的东西,我曾尝试过没有成功。 这次我做了这个以防万一。 还要注意的是,以下两种情况都不能解决我的问题,尽pipe它为其他人解决了这个问题:

 npm cache clean sudo npm cache clean 

我得到这个错误在npm安装和添加.npmignore没有解决它。

错误:ENOENT,stat'C:\ Users \ My-UserName \ AppData \ Roaming \ npm'

我试图去提到的文件夹,它不存在。 当我在漫游文件夹中创build npm文件夹时,该错误已得到解决。

这是在Windows 8.1上

我有同样的问题,只是发现一个处理没有提到这里。 虽然我会贡献给社区:

npm install -g myapp不复制bin目录。 我发现这是因为我没有将它包含在我的package.json中的files

 "files": [ "lib", "bin" // this was missing ] 

在尝试npm install一堆依赖项时,我收到了类似的错误信息。 结果发现其中一些未能在Debian / Ubuntu上安装,因为他们希望/usr/bin/node成为可执行的节点。 要解决,你需要做的

 sudo ln -s nodejs /usr/bin/node 

或更好,

 sudo apt-get install nodejs-legacy 

欲了解更多信息: https : //stackoverflow.com/a/21171188/7581

我想你的已编译的咖啡脚本从发布的npm包中丢失了。 尝试编写预发布命令。

在我的情况下(多个代码ENOENT errno 34)的问题是~/.npm/目录访问。 里面有一些有root:root权限的子目录root:root权限,当我以普通用户的身份运行命令(没有sudo )的时候,会造成问题。 于是我把~/.npm/ dir里的所有子目录和文件的所有权都改成了我的本地用户和组。 这在我的Ubuntu(在Mac上也应该工作)的技巧。

 $ sudo chown yourusername.yourgroupname ~/.npm/ -R 

你应该知道你的用户名,对吧? 如果没有,那么运行$ whoami并用它replace你的组名,如下所示:

 $ sudo chown johnb.johnb ~/.npm/ -R 

编辑:

testing案例

从我的本地帐户/home/johnb我npm安装全球一些发电机yeoman ,像这样:

 $ sudo npm install -g generator-laravel 

问题性质

上面的行为导致一些依赖被安装在~/.npm/ dir里面,拥有root:root所有权(因为sudo ... )。 很明显,当拉取依赖关系并将它们写入本地用户~/.npm/时,npm不会以本地用户身份运行(或者更改依赖关系后继所有者)。 只要npm会对基本的unix文件系统安全问题如此不小心,问题就会再次出现。

解答

  1. 持续检查~/.npm/包含除本地用户帐户以外的所有权(和/或权限)的子目录,尤其是当您使用sodo (root)安装或更新某些内容时。 如果是这样,请将~/.npm/的所有权以recursion方式更改为本地用户。

  2. npm, bower, grunt, ...询问npm, bower, grunt, ...社区他们是如何解决这个问题的。

我试图安装一个grunt插件时出现这个错误。 我发现我有一个过时的版本的NPM和错误消失后更新npm到最新版本

 npm install -g npm 

我在本地安装的npm install上遇到类似的错误:

 npm ERR! enoent ENOENT: no such file or directory, stat '[path/to/local/installation]/node_modules/grunt-contrib-jst' 

我不确定是什么原因导致了这个错误,但是我最近在本地安装了一些新的节点模块,用自制软件升级了节点,然后运行'npm update -g'。

我能够解决问题的唯一方法是完全删除本地node_modules目录并再次运行npm install

 cd [path/to/local/installation] npm rm -rdf node_modules npm install 

我尝试了所有在网上find的东西( npm cache clearrm -rf ~/.npm ),但似乎没有任何效果。 什么解决了这个问题是更新节点(和NPM)到最新版本。 试试看

在Windows中,我有一个类似的错误。 search粘贴应用数据并searchstringnpm

我在atlasboard\lib\package-dependency-manager.jsatlasboard\lib\cli\commands.js中用'npm.cmd'replace了string'npm' (包括引号)。 这解决了这个问题。

在全局安装( npm install -g mymodule )期间,与不存在的脚本进行封装的过程相同。

在package.json中:

  ... "bin": { "module": "./bin/module" }, ... 

./bin/module不存在,因为它被命名为modulejs

  1. 安装最新版本的节点
  2. 运行:npm cache clean
  3. 运行:npm install cordova -g

我特别有类似的问题:ERR! enoent ENOENT:没有这样的文件或目录,chmod'node_modules / npm / node_modules / request / node_modules / http-signature / node_modules / sshpk / bin / sshpk-conv我尝试了所有上述解决scheme,但没有运气。 我使用的是stream浪箱,而且这个项目在一个共享文件夹中。 问题似乎只在那里,当我把项目移动到另一个不共享的文件夹(好主人),瞧! 问题解决了。 以防万一另一个人也使用stream浪汉

我有一个类似的问题,不同的原因: yo node生成器已经添加"files": ["lib/"]到我的package.json ,因为我的cli.jslib/目录之外,它跳过时发布到npm。

(Yeoman问题在https://github.com/yeoman/generator-node/issues/63它应该很快被修复。);

我得到错误“错误:ENOENT,stat'C:\ Users \ userName \ AppData \ Roaming \ npm'。

我最近升级到Windows 7 x64机器上的节点4.2.1。 运行时

 npm install -g bower 

我有一个类似的错误:

npm ERR! ENOENT:没有这样的文件或目录,打开'C:\ Users \ THE_USERNAME \ AppData \ Local \ Temp \ npm-THE_HASH'

认为它与AppDatapath有关,我玩弄了

 npm config edit 

 npm config edit --global 

更改前缀,caching和tmp字段,但收到与新path相同的错误:

npm ERR! ENOENT:没有这样的文件或目录,打开'C:\ Users \ THE_USERNAME \ npm-temp \ npm-THE_HASH'

所有的命令都以pipe理员身份运行,所以我拥有完全的权限。

然后我认为现有的文件有一些问题,所以我跑了:

 npm cache clean 

但是得到了同样的错误。 但是,还是有一些临时文件在附近。 用cygwin手动删除所有临时数据终于为我解决了这个问题:

 rm -rf bower bower.cmd node_modules etc 

如果你只有Windows cmd,你可以使用类似的东西

 rmdir /S THE_TEMP_DIR 

删除所有的子目录(尽pipe如果你有深度嵌套的节点依赖关系,这是出了名的问题)

所以,也许有一些问题升级NPM和凉亭或其他包的版本挂起。 在我看来,这似乎是问题所在

安装离子时,我得到了错误

115648 error enoent ENOENT:no such file or directory,rename'C:\ Users \ UserName \ AppData \ Roaming \ npm \ node_modules.staging \ ansi-b11f0c4b' – >'C:\ Users \ UserName \ AppData \ Roaming \ npm \ node_modules \离子\ node_modules \cordova-LIB \ node_modules \ ANSI”

在那条路上没有叫做ansi文件夹。 我在那里创build它,并正确安装。

如果您尝试在您的项目目录中进行“安装”,出现此错误,您可以尝试:

 rm -rf ./node_modules npm cache clear npm remove sails 

那么你可以尝试“make install”

如果你有“npm ERR!enoent ENOENT:no such file or directory,chmod'… / djam-backend / node_modules / js-beautify / js / bin / css-beautify.js'”,那么你可以尝试安装一些以前版本的js-beautify,更多评论: https : //github.com/beautify-web/js-beautify/issues/1247

 "dependencies": { ... "js-beautify": "1.6.14" ... } 

并运行“make install”。 在这种情况下,如果没有其他需要更高版本(1.7.0)的依赖关系,则可能会出现这种情况,您还必须在packages.json中降级此包。

要么

以上都没有为我工作。 但yarn install工作,然后npm i开始工作。 不知道什么纱线固定,但快速和简单的解决scheme!

请试试这个

 SET HTTP_PROXY=<proxy_name> 

然后尝试一下命令,它会起作用