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、package.json 以及支持多个大版本的第三方库,每个版本的测试?