我正在尝试在ubuntu服务器上使用npm和nodejs进行设置,但注意到我在运行后最终得到了两个版本
sudo apt-get install nodejs npm
我知道这一点,因为当我运行npm -v
时,它会返回1.3.10
,而当我运行sudo npm -v
时,它会返回2.3.0
。在我继续前进之前,我想要正确设置。有谁知道为什么我最终有两个版本?我的理解是安装nodejs也应该安装npm,但这只允许我使用提升权限运行npm,我知道我不应该这样做。任何人都可以让我知道我做错了什么?谢谢。
答案 0 :(得分:1)
尝试运行which npm
然后sudo which npm
以查看哪个被视为全局安装并删除另一个。然后将您的环境指向现有的npm。
答案 1 :(得分:1)
包npm
包括nodejs
,nodejs
包括npm
。至少,它们包括不同版本的npm(我没有检查节点版本)然后冲突。事实证明,nodejs
包含更新版本的npm
(我假设更新版本的节点),所以这是我选择继续进行的版本。这是适合我的完整解决方案。
卸载所有版本的节点和npm。然后运行sudo apt-get install nodejs
。最后,重启系统。
重新启动后,npm可以在没有提升权限的情况下运行,但在没有它们的情况下仍然无法安装。要解决此问题,this答案中的建议很有用。简而言之,创建以下配置文件以将包存储在其他位置:
#~/.npmrc
prefix=~/.npm_modules
我不完全确定重启的部分会播放,但是在卸载后会显示npm
包的某些内存。在重新启动之前,ubuntu继续在/ usr / bin /中查找npm,即使它位于/ usr / local / bin /中。我想这会与PATH环境变量中的目录顺序有关,但是如果有人可以填写我在这里缺少的内容,即使仅用于提供信息,我也会很感激。
修改强>
发表这篇文章后,我发现更改npm软件包的位置可能会导致使用npm install -g npm
更新npm的问题,我认为这是建议的更新方法。我见过的另一种解决方案是让当前用户成为默认软件包位置的所有者,但这对我来说似乎有些愚蠢,并且不适用于多用户设置。有谁知道更好的解决方案?整个npm设置看起来有点像22 ...
答案 2 :(得分:1)
对于某些Linux发行版(Debian / Ubuntu和RedHat / CentOS),发行版提供的最新节点版本可能会落后于稳定版本。 Here are instructions from NodeSource获取最新节点。
然后,您可以通过运行npm
安装最新的sudo npm i -g npm@latest
。
答案 3 :(得分:1)
这是一个较旧的问题,但我最近在Windows上遇到了类似的问题,我安装了节点js和一个控制我的构建的gradle脚本。命令行上的npm --version报告了正确的npm版本,但是gradle任务有一个不同的版本。我之前运行过npm -g npm @ latest命令,这就是我遇到麻烦的原因。
事实证明,"其他" npm的版本托管在我的用户文件夹中的npm-cache中,一旦我删除了该文件夹,我的gradle任务只找到了我安装的npm副本。