node.js – 为什么我必须以管理员身份调用npm链接?

我通过全局安装了一些nodejs包

sudo npm install gulp -g

现在我(或同一台机器上的另一个开发人员)想在项目中使用它

me@host:/my/project$npm link gulp

它失败了

unbuild gulp@3.8.11
npm ERR! Error: EPERM, chmod '/my/projectnode_modules/gulp/bin/gulp.js'
npm ERR!  { [Error: EPERM, chmod '/my/projectnode_modules/gulp/bin/gulp.js']
npm ERR!   errno: 50,
npm ERR!   code: 'EPERM',
npm ERR!   path: '/my/projectnode_modules/gulp/bin/gulp.js' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Linux 3.2.0-4-amd64
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "link" "gulp"
npm ERR! cwd /raid5/workspaces/jgr/aktivglueck-laravel
npm ERR! node -v v0.10.29
npm ERR! npm -v 1.4.21
npm ERR! path /my/projectnode_modules/gulp/bin/gulp.js
npm ERR! code EPERM
npm ERR! errno 50
npm ERR! stack Error: EPERM, chmod '/my/projectnode_modules/gulp/bin/gulp.js'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /my/projectnpm-debug.log
npm ERR! not ok code 0

sudo npm link gulp

一切正常.

我想知道的是:为什么npm链接需要管理员权限?在我的理解中,我在我的项目文件夹中创建了一个链接,在那里我拥有完全权限 – 那么它在全局系统上做了什么?

最佳答案 我相信npm链接会在全局安装的节点包的任何位置创建一个符号链接到当前目录.见
here.

如果您没有该路径的写权限(您可以使用npm config get prefix检查),您将收到您在那里看到的错误.

为避免必须sudo全局安装/链接,您可以更改该目录的所有权/权限.

点赞