关于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,刚装的系统,应该没问题啊


5 回复

关于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 在执行某些命令时没有正确地传递环境变量导致的。可以尝试以下几种方法来解决:

  1. 使用 sudo -E-E 选项会保留当前用户的环境变量,这有助于避免权限问题。

    sudo -E npm install -g n
    
  2. 修改 .npmrc 文件: 如果你在 .npmrc 文件中设置了某些路径,确保这些路径是可写的。

    sudo nano ~/.npmrc
    

    确保文件中的路径设置正确且可写。

  3. 检查 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 命令虽然能够提升权限,但可能存在某些配置或环境问题导致命令执行不正常。

解决方法

  1. 检查npm配置: 确认一下你的npm配置文件是否指向了正确的目录。

    sudo npm config get prefix
    

    如果输出的结果不是 /usr/local 或者你的预期路径,可以尝试重置为默认值:

    sudo npm config set prefix /usr/local
    
  2. 手动创建目标目录并修改权限: 尝试手动创建并设置正确的权限:

    sudo mkdir -p /usr/lib/node_modules
    sudo chown -R $USER:$USER /usr/lib/node_modules
    
  3. 重新安装 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 的正常使用。

回到顶部