Nodejs源码编译安装0.10.28后,命令行运行sudo npm提示找不到命令

Nodejs源码编译安装0.10.28后,命令行运行sudo npm提示找不到命令

问题描述:无法使用sudo npm命令,node 命令可以使用如:node app.js sudo npm 报错: 找不到命令 npm install -g express-generator报错: npm ERR! Error: EACCES, mkdir ‘/etc/node/lib/node_modules/express-generator’ … npm ERR! Please try running this command again as root/Administrator.

源码包:http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz 安装目录:/etc/node 操作系统:ubuntu12.04,64位 环境变量:/etc/profile,已加入

export NODE_HOME=/etc/node export PATH=$PATH:$NODE_HOME/bin export NODE_PATH=$NODE_HOME/lib/node_modules

另外 我已经在我帐号下的./bashrc 文件加入: export PATH=/etc/node/lib/node_modules/npm/bin:$PATH


12 回复

问题描述

你尝试在Ubuntu 12.04上通过源码编译安装Node.js 0.10.28,并且安装完成后发现无法使用sudo npm命令。具体表现为:

  • node app.js 可以正常运行。
  • 使用 sudo npm 时提示找不到命令。
  • 使用 npm install -g express-generator 安装全局模块时出现权限错误。

解决方法

1. 检查环境变量

首先确保你的环境变量配置正确。根据你的描述,你在 /etc/profile~/.bashrc 中添加了以下内容:

# /etc/profile
export NODE_HOME=/etc/node
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules

# ~/.bashrc
export PATH=/etc/node/lib/node_modules/npm/bin:$PATH

确保这些环境变量配置无误并且生效。可以通过执行以下命令检查:

echo $PATH

你应该能看到 /etc/node/bin 路径。

2. 重新加载环境变量

如果环境变量没有生效,你需要重新加载配置文件:

source /etc/profile
source ~/.bashrc

3. 使用正确的权限安装全局模块

当你使用 sudo 运行命令时,环境变量不会被继承。因此,你需要使用正确的权限来安装全局模块。你可以通过以下方式解决:

  • 不使用 sudo 安装全局模块(如果你有权限):
npm install -g express-generator
  • 如果你需要使用 sudo,确保安装路径对所有用户可写:
sudo npm install -g --prefix /usr/local express-generator

或者修改默认的全局安装路径:

mkdir -p /usr/local/lib/node_modules
sudo chown -R $USER /usr/local/lib/node_modules
npm config set prefix /usr/local

之后再运行:

npm install -g express-generator

总结

确保环境变量配置正确并生效,同时避免在全局安装模块时使用 sudo,除非你有明确的权限需求。如果必须使用 sudo,确保安装路径对所有用户可写。这样应该能解决你遇到的问题。


如果是sudo 没有 了npm 了吧…那就会涉及到了一个sudo 环境变量重置的问题…这个问题非常诡异…

无语了,各种重新编译也不行,也试过:sudo chown -R whoami node_modules/ 最终还是,用apt-get install nodejs 安装的 ,问题ok: 1.先更新源 sudo add-apt-repository ppa:chris-lea/node.js sudo apt-get update 2.安装 sudo apt-get install nodejs 参考:https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

怎么不用 nvm 装?

这个不是管理node版本的吗?

重新安装node,npm不就出来了么。。。

源码安装,不需要改什么啊,./configure && make && make install

nvm +1支持各种版本切换,现在想知道怎么能把原先的编译版无痛干净地删掉了。

npm是否正常,如果npm正常,而sudo npm异常,那只能是环境问题

我现在也遇到了同样的问题。。。sudo npm 找不到命令

我这边也是,我的环境是ubuntu14.04,安装node4.2.1,正常使用node和npm都没问题 sudo node 和sudo npm 都找不到命令

对于你的问题,是因为npm没有正确安装到你的环境路径中。你需要确保npm被正确地安装并添加到系统路径中。通常情况下,当你从源码编译安装Node.js时,npm也会被一同安装。

你可以通过以下步骤来解决这个问题:

  1. 验证npm是否已被安装: 首先,检查一下npm是否已经被正确安装。

    node -e "console.log(require('npm').version)"
    

    如果npm已经被安装,这个命令应该会输出一个版本号。

  2. 确保路径设置正确: 确认你的PATH环境变量是否正确设置了。你可以在~/.bashrc文件或/etc/profile文件中检查是否已经加入了以下行:

    export PATH=/etc/node/bin:$PATH
    

    修改完成后,运行source ~/.bashrcsource /etc/profile使修改生效。

  3. 重新安装npm(如果npm没有正确安装): 如果上述方法不起作用,你可以尝试手动安装npm。首先删除现有的npm安装,然后重新安装:

    sudo rm -rf /etc/node/lib/node_modules/npm
    cd /etc/node
    curl -L https://www.npmjs.com/install.sh | sudo sh
    
  4. 权限问题: 错误信息中的EACCES表示权限问题。你可以尝试使用sudo来安装全局包,但更好的做法是避免全局安装包。如果你确实需要全局安装包,确保你的用户具有相应的写权限,或者考虑使用nvm(Node Version Manager)来管理不同版本的Node.js和npm,这样可以避免权限问题。

  5. 验证全局安装路径: 你可以查看全局安装包的默认路径:

    npm config get prefix
    

    如果输出的路径不是你期望的路径,你可以修改全局安装路径配置:

    npm config set prefix /etc/node
    

这些步骤应该能帮助你解决问题。如果仍然存在问题,请提供更多的错误信息以便进一步诊断。

回到顶部