我在使用 Ubuntu 服务器(EC2 实例)时遇到了问题,我在ubuntu
Amazon 提供的默认用户下安装了 NVM(节点版本管理器)(也是推荐的安装),然后通过 NVM 将带有 npm 版本的节点安装到以下路径,
$which node
/home/ubuntu/.nvm/versions/node/v6.12.3/bin/node
$which npm
/home/ubuntu/.nvm/versions/node/v6.12.3/bin/npm
其中 $PATH 等于:
PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/.nvm/versions/node/v6.12.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
但是当我尝试运行sudo
命令时,它没有被接收npm
,node
经过一番研究后,我很好奇它是否与以下原因有关,或者是我没有注意到的事情。
- 特定于 Ubuntu 的问题,其中“node”与不同的包相关联,因此必须使用“nodejs”?
- nvm、node 和 npm 需要安装,
sudo
以便 root 可以访问路径
sudo
错误:
sudo npm install
sudo: npm: command not found
sudo node run
sudo: node: command not found
以下是可能有用的其他环境变量:
HOME=/home/ubuntu
NVM_DIR=/home/ubuntu/.nvm
USER=ubuntu
部署日志发送的错误消息:
[stderr]/usr/bin/env: ‘node’: No such file or directory
答案1
AWS 对常规设置进行了一些修改,以便您无需执行 sudo 即可执行 npm install global packages。通常,npm 和 node 随 Ubuntu 中的 nodejs 包一起提供,它们安装到 /usr/bin,全局节点模块放在 /usr/lib/node_modules 中。
在 Ubuntu 18.04 中安装 nodejs 后,您可以检查它们位于何处。
$ dpkg -S /usr/bin/npm
nodejs: /usr/bin/npm
$ dpkg -S /usr/bin/node
nodejs: /usr/bin/node
$ dpkg -L nodejs
<output very long and not included here>
如果您想坚持 AWS 希望您执行的操作方式,我建议您不要使用 sudo,即使在软件包安装中指定 -g 也是如此。或者,您可以从 Ubuntu 普通存储库安装 nodejs,并在需要安装 npm 软件包(例如 bower、gulp)以供全局访问时使用 sudo。
编辑:如果您想在较旧的 Ubuntu 版本(例如 16.04)中使用最新的 nodejs,请按照以下说明进行操作nodejs。
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo apt-get install -y build-essential
最后一步允许在执行 npm install 时进行基本编译。我猜你最初问题的答案是 sudo 不起作用,因为 nvm 环境是为 ubuntu 设置的,而 sudo 会把它搞乱。