npm坚持使用旧版本,但似乎有多个版本

时间:2016-04-19 04:40:50

标签: node.js npm zsh

我想更新npm,但似乎我有2个版本,我不知道如何最好地解决它,所以我只有一个。

我现在的主要问题是我有一些较旧的自耕农发电机 /Users/me/.npm-packages/lib/node_modules/
但是新的已经进入了 /Users/me/.npm-global/lib/node_modules/

当我运行yo时,它只找到旧的发电机。

我希望将我在全球范围内安装的所有软件包放在一个用户的同一个地方,而且我不想要根据我不需要的东西进行操作。

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

➜  ~ 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"

想要使用当前节点并标准化我的包裹的位置,并且可以将所有东西都吹走,这样它就能正常工作。希望这对于那些比我更了解这些东西的人来说很容易诊断。

1 个答案:

答案 0 :(得分: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