关于sudo的一个诡异问题(Nodejs相关环境配置可能受影响)
关于sudo的一个诡异问题(Nodejs相关环境配置可能受影响)
想要安装个n
,npm install -g n
,报错
npm http GET http://npm.hacknodejs.com/n
npm http 404 http://npm.hacknodejs.com/n
npm ERR! registry error parsing json
npm ERR! Error: EACCES, mkdir '/usr/lib/node_modules'
npm ERR! { [Error: EACCES, mkdir '/usr/lib/node_modules']
npm ERR! errno: 3,
npm ERR! code: 'EACCES',
npm ERR! path: '/usr/lib/node_modules',
npm ERR! fstream_type: 'Directory',
npm ERR! fstream_path: '/usr/lib/node_modules/n',
npm ERR! fstream_class: 'DirWriter',
npm ERR! fstream_stack:
npm ERR! [ '/usr/lib/nodejs/npm/node_modules/fstream/lib/writer.js:171:23',
npm ERR! '/usr/lib/nodejs/npm/node_modules/mkdirp/index.js:37:53',
npm ERR! 'Object.oncomplete (fs.js:107:15)' ] }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
npm ERR! System Linux 3.8.0-19-generic
npm ERR! command "node" "/usr/bin/npm" "install" "-g" "n"
npm ERR! cwd /home/shukri
npm ERR! node -v v0.10.12
npm ERR! npm -v 1.2.32
npm ERR! path /usr/lib/node_modules
npm ERR! fstream_path /usr/lib/node_modules/n
npm ERR! fstream_type Directory
npm ERR! fstream_class DirWriter
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, mkdir '/usr/lib/node_modules'
npm ERR! fstream_stack /usr/lib/nodejs/npm/node_modules/fstream/lib/writer.js:171:23
npm ERR! fstream_stack /usr/lib/nodejs/npm/node_modules/mkdirp/index.js:37:53
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /home/shukri/npm-debug.log
npm ERR! not ok code 0
然后 sudo npm install -g n
,但是输入密码之后就没有反应了
然后试着’npm -v’
1.2.32
然后 sudo npm -v
,命令行又什么都没输出,也没反应。。。
系统是linuxmint15
,刚装的系统,应该没问题啊
关于sudo的一个诡异问题(Nodejs相关环境配置可能受影响)
最近在安装 n
模块时遇到了一些问题。我尝试通过 npm install -g n
来全局安装 n
,但遇到了权限错误。
报错信息
npm http GET http://npm.hacknodejs.com/n
npm http 404 http://npm.hacknodejs.com/n
npm ERR! registry error parsing json
npm ERR! Error: EACCES, mkdir '/usr/lib/node_modules'
npm ERR! { [Error: EACCES, mkdir '/usr/lib/node_modules']
npm ERR! errno: 3,
npm ERR! code: 'EACCES',
npm ERR! path: '/usr/lib/node_modules',
npm ERR! fstream_type: 'Directory',
npm ERR! fstream_path: '/usr/lib/node_modules/n',
npm ERR! fstream_class: 'DirWriter',
npm ERR! fstream_stack:
npm ERR! [ '/usr/lib/nodejs/npm/node_modules/fstream/lib/writer.js:171:23',
npm ERR! '/usr/lib/nodejs/npm/node_modules/mkdirp/index.js:37:53',
npm ERR! 'Object.oncomplete (fs.js:107:15)' ] }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
根据错误提示,我需要以管理员身份运行该命令。于是尝试使用 sudo
:
sudo npm install -g n
输入密码后,命令行没有任何反应,似乎卡住了。
进一步验证
接着我检查了当前的 npm
版本:
npm -v
结果显示版本为 1.2.32
。
然后我尝试用 sudo
命令来查看 npm
的版本:
sudo npm -v
结果命令行没有任何输出,也没有任何反应。
系统信息
我的系统是 Linux Mint 15
,这是一个新安装的系统,理论上不应该有问题。
解决方案
这个问题可能是由于 sudo
在执行某些命令时没有正确地传递环境变量导致的。可以尝试以下几种方法来解决:
-
使用
sudo -E
:-E
选项会保留当前用户的环境变量,这有助于避免权限问题。sudo -E npm install -g n
-
修改
.npmrc
文件: 如果你在.npmrc
文件中设置了某些路径,确保这些路径是可写的。sudo nano ~/.npmrc
确保文件中的路径设置正确且可写。
-
检查
npm
和 Node.js 安装路径: 确保你的npm
和 Node.js 是最新版本,并且安装路径正确。sudo npm install -g npm sudo apt-get update sudo apt-get install nodejs
希望以上解决方案能帮助你解决问题。如果还有其他疑问或问题,请随时提问。
sudo su 转成 superuser mode, 再试试看。
谢谢,问题已经解决了。。
不过是通过将系统的node完全删除干净,然后通过ppa安装node,通过install.sh
安装npm
,这样系统就干净了。。
〉通过ppa安装node
好的。我也是这么安装 node 的。
根据你的描述,这个问题可能是由于权限问题导致的。当你尝试全局安装 n
包时,npm
需要写入 /usr/lib/node_modules
目录,但由于权限不足导致失败。使用 sudo
命令虽然能够提升权限,但可能存在某些配置或环境问题导致命令执行不正常。
解决方法
-
检查npm配置: 确认一下你的npm配置文件是否指向了正确的目录。
sudo npm config get prefix
如果输出的结果不是
/usr/local
或者你的预期路径,可以尝试重置为默认值:sudo npm config set prefix /usr/local
-
手动创建目标目录并修改权限: 尝试手动创建并设置正确的权限:
sudo mkdir -p /usr/lib/node_modules sudo chown -R $USER:$USER /usr/lib/node_modules
-
重新安装
n
包: 确保所有准备工作都做好后,再尝试安装n
:sudo npm install -g n
示例代码
# 检查当前npm配置
npm config get prefix
# 设置npm配置
sudo npm config set prefix /usr/local
# 手动创建并设置权限
sudo mkdir -p /usr/lib/node_modules
sudo chown -R $USER:$USER /usr/lib/node_modules
# 安装n
sudo npm install -g n
通过以上步骤,你应该能够解决安装 n
包时遇到的问题。如果问题仍然存在,请检查是否有其他安全软件或系统策略限制了 sudo
的正常使用。