npm 卡在旧版本上,但似乎有多个版本

Posted

技术标签:

【中文标题】npm 卡在旧版本上,但似乎有多个版本【英文标题】:npm stuck on old version, but seem to have multiple versions 【发布时间】:2016-08-11 01:26:54 【问题描述】:

我想更新 npm,但我好像有 2 个版本,我不确定如何最好地解决它,所以我只有一个。

我现在的主要问题是我在/Users/me/.npm-packages/lib/node_modules/ 中有一些较旧的 yeoman 生成器, 但较新的已经进入 /Users/me/.npm-global/lib/node_modules/

当我运行yo 时,它只会找到较旧的生成器。

我希望将所有全局安装的软件包集中在一个用户名下的一个地方,并且我不想需要 sudo 一些我不需要的东西。

似乎我在/Users/me/.npm-packages/bin/npm 有节点,也许还有/usr/local/bin/npm。我已经访问了两个目录并更新了 npm,但它仍然返回 2.11.2 而不是它声称已安装的 3.8.6。这是我尝试修复的一些 CLI:

➜  ~ which npm
/Users/me/.npm-packages/bin/npm
➜  ~ sudo which npm
/Users/me/.npm-packages/bin/npm
➜  ~ npm install npm@latest
npm@3.8.6 node_modules/npm
➜  ~ npm -v
2.11.2
➜  ~ npm install -g npm@latest
npm ERR! Darwin 15.3.0
npm ERR! argv "/usr/local/bin/node" "/Users/me/.npm-packages/bin/npm" "install" "-g" "npm@latest"
npm ERR! node v5.10.1
npm ERR! npm  v2.11.2
npm ERR! path /usr/local/lib/node_modules/npm
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall rmdir

..etc
➜  ~ sudo npm install -g npm@latest
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
npm@3.8.6 /usr/local/lib/node_modules/npm
➜  ~ npm -v
2.11.2

我还尝试安装 nvm 并在其中安装最新版本的 npm,如 here 所述

我的.zshrc 已将 PATH 变量设置为:

NPM_PACKAGES=/Users/me/.npm-packages
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
PATH="$NPM_PACKAGES/bin:$PATH"

想要使用当前节点并标准化我的包所在的位置,并且可以将所有内容都吹走以使其正常工作。希望这对于比我了解更多的人来说很容易诊断。

【问题讨论】:

您会觉得使用全局安装更舒服吗?您需要同时安装这两个版本吗? 我从没想过要安装 2 个全局版本。主要是我想确保它归我所有,而不是 root.. 或任何必要的东西,所以我不需要 sudo 来做全球性的事情。 我知道您可能正在使用全局安装的版本。但是,全局包寄存器(NPM_PACKAGES 变量)位于您的用户中。问题是无法使用它和sudo npm i -g npm@latest。然后重新启用本地 NPM_PACKAGES 变量。 @pandres95 我对条款有点模糊。全球 npm .. 这是否意味着由 root 拥有?我想只有当我 -g 时我才想要 1 个 npm,而且我 认为 归我所有是有意义的。 我有 2 个目录,其中包含我在全球范围内安装的东西。它在某个时候切换,我想当我修复需要 sudo 来安装东西时.. 【参考方案1】:

运行which npm。你会发现npm 可执行文件位于/usr/local/bin/npm。此位置归 root 所有。

但是,您的全局包(即您使用-g 选项安装的包)位于您的.zshrc 在第1 行设置的位置(是的,NPM_PACKAGES=/Users/me /.npm-packages)。

要禁用您的本地 NPM_PACKAGES,只需注释掉您的.zshrc 文件中的相关行。

# NPM_PACKAGES=/Users/me/.npm-packages
# NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
# PATH="$NPM_PACKAGES/bin:$PATH"

然后,安装最新的 (需要 sudo) npm 版本。

npm install -g npm@latest

最后,删除.zshrc上的评论标记。

NPM_PACKAGES=/Users/me/.npm-packages
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
PATH="$NPM_PACKAGES/bin:$PATH"

您将获得最新的npm 可执行文件,同时将全局包安装到您的用户文件夹中,因此不需要使用sudo

【讨论】:

嗯.. 我注释掉了那些 NPM/Node 行,做了一个sudo install -g npm@latest,它说它安装得很好,但之后npm --version 仍然是 2.11.2。如果它搞砸了,我不需要我的 zshrc 中的那些路径;他们只是因为遵循了一些设置指南(显然对我来说还没有完全解决) 键入 which npm 以找出此 npm 设置的位置。然后,我们会解决这个问题。

以上是关于npm 卡在旧版本上,但似乎有多个版本的主要内容,如果未能解决你的问题,请参考以下文章

npm - 发布具有多个版本的模块多个分支

wix 安装程序 - 支持升级和同时安装多个

npm、package.json 以及支持多个大版本的第三方库,每个版本的测试?

对于内部依赖特定版本的不同包,如何管理项目中多个版本的 npm 模块?

在旧 Mac (10.6.8) 上安装 git

是否可以在 Angular JS 中进行服务器端渲染(在旧版本中,即 2.0 之前的版本)?