代码之家  ›  专栏  ›  技术社区  ›  Paul Razvan Berg

通过nvm升级节点和npm,但旧节点仍用于全局包

  •  2
  • Paul Razvan Berg  · 技术社区  · 6 年前

    我使用node 9.3.0已经很长时间了,但最近我迁移到了10.12.0。我做的时候一切都很好 node -v npm -v 我得到了正确的版本:

    Paul-Bergs-Macbook:node paulrberg$ node -v
    v10.12.0
    Paul-Bergs-Macbook:node paulrberg$ which node
    /Users/paulrberg/.nvm/versions/node/v10.12.0/bin/node
    Paul-Bergs-Macbook:node paulrberg$ npm -v
    6.4.1
    Paul-Bergs-Macbook:node paulrberg$ which npm
    /Users/paulrberg/.nvm/versions/node/v10.12.0/bin/npm
    

    但是,当我尝试运行任何NPM命令时,都会使用旧版本。即:

    Paul-Bergs-Macbook:node paulrberg$ npm i truffle -g
    /Users/paulrberg/.nvm/versions/node/v9.3.0/bin/truffle -> /Users/paulrberg/.nvm/versions/node/v9.3.0/lib/node_modules/truffle/build/cli.bundled.js
    + truffle@4.1.14
    added 81 packages from 311 contributors in 1.715s
    

    还有:

    npm list -g --depth=0
    /Users/paulrberg/.nvm/versions/node/v9.3.0/lib
    └── truffle@4.1.14
    

    不确定这是否是一些bash代码仍然指向最后一个版本,但我似乎找不到任何证据来证明这一点。正在运行 env 并检查 9.3.0 环境变量不会产生结果。

    到目前为止我所做的:

    • 使用删除节点9.3.0 nvm uninstall 9.3.0
    • 删除NVM并重新启动计算机后重新安装NVM
    • nvm reinstall-with-packages
    • 删除 ~/.nvmrc 和设置 10.12.0 之后在那里
    • 检查是否有来自自制的重叠节点 问题可能是什么?
    3 回复  |  直到 6 年前
        1
  •  3
  •   Paul Razvan Berg    6 年前

    经过几个小时痛苦的Unix调试后,问题与在 npm config :

    prefix = "/Users/paulrberg/.nvm/versions/node/v9.3.0"
    

    如果你遇到类似的问题,一定要通过这样做来解决:

    npm config rm prefix
    

    这的确是 mentioned 尽管不一定会在NVM页面上显示:

    如果您有~/.npmrc文件,请确保它不包含任何前缀。 设置(与NVM不兼容)

        2
  •  1
  •   Paul D'Ambra    6 年前

    看起来你可能需要跑步 nvm reinstall-packages

    https://github.com/creationix/nvm#migrating-global-packages-while-installing

    上面写着


    安装时迁移全局包 如果要安装新版本的node.js并从以前的版本迁移NPM包:

    nvm install node --reinstall-packages-from=node

    这将首先使用“NVM版本节点”来标识要从中迁移包的当前版本。然后,它解析要从远程服务器安装的新版本并安装它。最后,它运行“nvm reinstall packages”将NPM包从以前的节点版本重新安装到新的节点版本。

    您还可以从特定版本的节点安装和迁移NPM包,如下所示:

    nvm install 6 --reinstall-packages-from=5 nvm install v4.2 --reinstall-packages-from=iojs


    另一个“解决方案”是不使用全局包。尤其是在使用NVM且无法确保全局包适用于“当前”版本时,最好在本地安装并使用 npx 运行本地命令

    松露安装 truffle 命令到./node_modules/.bin npm install 这样你就可以 npx truffle 运行本地的而不是 松露 运行全球一号


    编辑:

    另一个需要检查的是 node -v nvm current 不一定要报告相同的版本。

    我想知道 NVM电流 会为您报告V9.3吗?

    enter image description here

    啊,是的,在我的机器上,我可以在全球不同的地方安装松露 节点-V 报告

    enter image description here

     > node -v
    v9.5.0
     > nvm current
    system
     > nvm use v8
    Now using node v8.4.0 (npm v5.3.0)
     > node -v
    v8.4.0
     > nvm current
    v8.4.0
     > npm install -g truffle
    /Users/pauldambra/.nvm/versions/node/v8.4.0/bin/truffle -> /Users/pauldambra/.nvm/versions/node/v8.4.0/lib/node_modules/truffle/build/cli.bundled.js
    + truffle@4.1.14
    added 81 packages in 4.364s
    

    所以你可能错过了 nvm use v10 命令

        3
  •  0
  •   Guy    6 年前

    我认为更持久的解决办法是 this section 来自支持文档。

    安装时来自文件的默认全局包

    如果您在每次安装新版本时都有一个要安装的默认软件包列表,那么我们也支持这个列表——只需在$nvm_dir/default packages文件中添加每个行一个软件包名称。您可以在命令行上添加任何NPM接受的包参数。