Mac卸载vue-cli2X 时失败: Missing write access to --如侦探小说般的解谜之路

1. 先查看node 和 vue 的安装路径 

which vue : /Users/xxxxx/.node_global/bin/vue  

which node : /usr/local/bin/node

which npm : /usr/local/bin/npm  

  可以看到npm作为node的包管理工具, 其安装路径是一致的, vue显然安装在其他文件夹

2. npm uninstall 的原理 

  我们平时调用 node --version 和 vue --version 都是调用的  /usr/local/bin/中的命令

  .bash_profile 中发现 npm的默认安装路径是自己在全局变量中设置的:

npm config get prefix  :  /Users/xxxxx/.node_global

  在这里排除了百度出来的 nvm 造成的路径改变问题, npm的安装路径是已经设置好的. 

  那么应该没有问题啊, 为什么不能卸载呢?那我们先搞清楚系统环境变量和用户环境变量

3. 系统环境变量和用户环境变量

   环境变量就是一些指定的文件路径;

  系统环境变量对所有用户起作用,用户环境变量只对当前用户起作用;

    在 etc/profile 下的是系统级的配置

    在 ~/.bash_profile 中的是用户级的配置

4. 查看debug log, 发现是: 

 /Users/xxxxx/.node_global/lib/node_modules/vue-cli/node_modules
  是权限问题.

5. 这时我想起自己使用 homebrew 安装包, 会不会对这造成影响呢?

  百度homebrew时发现: 在Mac OS X 10.11之后/usr/local/等系统目录下的文件读写是需要root权限的, 所以我安装时都有使用sudo

    sudo brew install ,而这个问题有两种解决方法: 

      1. 对/usr/local 目录下的文件读写进行root用户授权     

       $ sudo chown -R $xxxxx /usr/local         
       语法解析 : chown : change owner 
                   -R : recursive  所有子目录递归chown
      2. 指定安装路径, 直接安装在不需要系统root用户授权就可以自由读写的目录下
    <install path> -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

  这让我想到 , 我创建的文件目录是否在需要root权限的目录下呢?

6. 所以我查看了一下自己创建的这个文件权限   命令: ls -l +文件夹/文件名

     ls -l /Users/xxxxx/.node_global/bin

  发现权限那一栏写的全是 root

 

 所以, 我现在是将文件夹移动到其他目录下呢?还是使用chown命令将文件夹下的所有权由root转为当前用户呢?

  step1 ,在尝试之前, 我决定先试试能不能安装全局包, 如果能安装,但不能卸载的话, 说明还不是权限的问题.

   用 cnpm install grunt-cli -g 试了一下, 发现果然没有权限.

  step2 ,我之前都是用sudo下载的全局包吗? 

    sudo install grunt-cli -g成功, 然而 sudo cnpm uninstall grunt-cli -g 却没有反应.

  step3 , 所以 sudo 只能解决install时的权限问题, 但不能解决卸载时的权限问题吗?

    然而我试着卸载了一下 webpack,卸载成功.

    只有在卸载 grunt-cli时报错

    既然是npm本身的问题,那就重装npm试试

  step4, 重装npm, 在查看npm文档时 发现文档开头就大字加粗提醒过权限问题, 不看文档的错啊!

  官方强推荐nvm, 正如上面提到过的,nvm会改变默认存储路径,这样就可以避免权限问题.

  看来要重装node 和 npm了.哒哒.

原文地址:https://www.cnblogs.com/noraZhang/p/13086453.html