• 基于nvm的Node、NPM的版本管理(NPM permission error的解决)


    最近在使用npm过程中,发现全局安装总会遇到permission相关的错误,所以总是要在前面加sudo,还得不停输入密码。

    懒惰使我进步,随手google了一下相关问题的解决方案,发现npm在官方文档中早有明示How to Prevent Permissions Errors。据其描述,根本原因其实是Node.js安装包将程序安装在了一个只有local permissions的地址上(写入是需要管理员权限的)。而其提供了两种修复的方式,其中的推荐方式既是本文要说的nvm的方式。

    nvm的优势

    nvm(Node Version Manager)通过对node和npm集中的版本管理主要解决了两个问题

    1. 统一解决了node和npm版本管理的问题,nvm提供了很方便的机制可以使我们在同一终端上安装多个版本的node和npm并且提供了快速切换版本的能力,这样为我们检测项目兼容性和bug定位提供了很大的帮助。
    2. 解决了本文一开始提到的种种permission的相关问题,自此再也不用重复输入sudo来进行全局安装。

    nvm的使用

    这里简单介绍一下nvm在MacOS下的安装和使用(注,nvm主要还是面向mac os和linux用户,使用windows的客官请看这里

    安装之前

    在安装之前,首先应该需要考虑一下是否要保留原有的系统安装的node。nvm是可以保留原有node来安装的,也提供了切回system node的方式。

    但是要注意
    如果系统中存在多用户,那么当前安装的nvm是只针对你的,其它用户如果没有安装则只能使用到系统安装的node版本。两者全局安装的node modules地址是不相同的(/usr/local/lib/node_modules/* VS ~/.nvm/versions/node/vX.X.X/lib/node_modules/*)。一定程度上是有版本不一致的风险的。

    如果选择卸载原有系统node,这里有一篇很实用的讲解

    安装

    安装方式比较简单,只要执行以下的脚本。脚本clone了项目代码,并进行了环境变量的设置。如果出现问题可以查看github上的trouble shooting。

    ```curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash ```

    在安装完后,关掉终端重开一个新的,输入以下指令验证安装。

    ```command -v nvm # should return nvm ```

    注:可以使用同一脚本来自动更新nvm

    使用

    安装完后,使用起来就非常简单明快了,以下是一些常用功能

    1. 安装某一版本的node nvm install

    ```nvm install --lts #安装最新的lts版本的node nvm install node #安装最新版本的node nvm install 6.14.4 #安装node版本6.14.4 ```

    2. 列出所有node版本

    ```nvm ls #本机所有版本 nvm ls -remote #远端所有版本 ```

    3. 切换、使用某一版本的node nvm use

    ```nvm use --lts #使用最新的lts版本的node nvm use node #使用最新版本的node nvm use 6.14.4 #使用node版本6.14.4 ```

    4. 启动node nvm run

    ```nvm run --lts #启动最新的lts版本的node nvm run node #启动最新版本的node nvm run 6.14.4 #启动node版本6.14.4 ```

    5. 使用某一版本执行

    ```nvm exec 4.2 node --version ```

    6. 查询某一版本的安装位置

    ```nvm which 5.0 ```
    node, --lts都是nvm自动维护的别称,表示最新版本和最新的long-term support版本。
    另,system同样也是别称,表示node的非nvm安装的system版本

    关于既有的node modules

    可以使用--reinstall-packages-from=node来自动在新的node中安装上一版本已有的node modules

    ```nvm install node --reinstall-packages-from=node #从上一版本继承 nvm install 6 --reinstall-packages-from=5 #从某一版本继承 ```

    关于镜像

    很神秘的是nvm windows很贴心的提供了命令行设置镜像的命令,而mvn木有,所以只好手动来。

    nvm node安装镜像

    1 手动方案,每次执行nvm安装时,执行

    ```export NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist nvm install node ```

    2 永久方案,当然是将export放到~/.bashrc

    npm镜像

    npm install的安装速度也是很感人的。所以,安装完node一般会把npm的镜像也设置成淘宝滴。

    ```npm config set registry https://registry.npm.taobao.org ```

    注:劝君莫用cnpm,与npm基本无异,然而经常会出一些想不到的bug。

    卸载

    nvm的卸载是手动完成的,但是不复杂。

    首先,删掉nvm文件

    ```$ rm -rf "$NVM_DIR" ```

    随后,修复环境变量,修改~/.bashrc (如果没有就去bash_profile找找),删掉以下这几行

    ```export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm [[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion ```

    搞定。

    总结

    mvn提供了一种管理Node.js版本的便捷方式,不管是安装、切换、删除都可以一步到位,无疑是现阶段的首选。

    原文地址:https://segmentfault.com/a/1190000016899030

  • 相关阅读:
    C++ 抽象类二(抽象类的基本语法)
    C++ 抽象类一(多继承与赋值兼容性原则)
    C++ 类的多态五(多态的语法本质分析)
    C++ 类的多态四(虚析构函数的重要性)
    C++ 类的多态三(多态的原理--虚函数指针--子类虚函数指针初始化)
    MEF等Ioc框架引起内存泄露-PartCreationPolicy
    MEF部件的生命周期(PartCreationPolicy)
    wpf prism IRegionManager 和IRegionViewRegistry
    silverlight开发实例(Prism+MVVM+RIA)(二)--创建shell及用户登录
    Prism框架 如何在主程序中合理的弹出子窗体
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9908108.html
Copyright © 2020-2023  润新知