mac上.bash_profile配置错误导致bash 命令行无法使用 command not found

翻遍了Google和Baidu无意中发现一个方法可完美解决,遂小记一下

  1. 卸载node

    sudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}
    
  2. 安装node

    1. 官网下载
    2. nvm版本控制安装
      • nvm安装方法:

        1. cd ~/

        2. git clone https://github.com/nvm-sh/nvm.git .nvm

        3. cd ~/.nvm

        4. git checkout v0.38.0

        5. . ./nvm.sh

        6. .bash_profile文件中添加以下代码:

          export NVM_DIR="$HOME/.nvm"
          [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
          [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
          
      • nvm使用方法:

        nvm 默认是不能删除被设定为 default 版本的 node,特别是只安装了一个 node 的时候,这个时候我们需要先解除当前版本绑定,然后再使用 nvm uninstall <version> 删除

        nvm ls-remote 列出所有可安装的版本
        
        nvm install <version> 安装指定的版本,如 nvm install v8.14.0
        
        nvm uninstall <version> 卸载指定的版本
        
        nvm ls 列出所有已经安装的版本
        
        nvm use <version> 切换使用指定的版本
        
        nvm current 显示当前使用的版本
        
        nvm alias default <version> 设置默认 node 版本
        
        nvm deactivate 解除当前版本绑定
        
  3. 获取环境路径

    1. cd ~/
    2. echo $PATH
    3. .bash_profile文件中添加: PATH="2步骤获取的路径放在此处:$PATH”
    4. source .bash_profile
  4. 完结

  5. 拓展延伸: https://github.com/LightXJ/blog/issues/28

    1. 全局安装

      1. 全局安装是将npm包安装在你的node安装目录下的node_modules文件夹中。在windows和mac中,全局安装的默认路径是不同的。在mac中默认是安装到/usr/locla/lib中。当然你也可以通过一下命令来查看全局安装路径。
        • 指令

          // 查看全局安装路径npm root -g

          // 查看npm的基础设置npm config ls

          // 查看安装目录路径npm config get prefix

          如果是公共电脑你不想将npm包安装在默认目录下,那么你可以通过命令来修改安装路径。// 修改安装目录路径npm config set ''

          如果在全局安装中遇到权限问题报错,你需要修改文件夹的权限,执行一下命令。sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

        • 全局命令

          npm包在全局安装之后,这个包的命令就会被注册到全局,你就可以直接在命令行中执行这个命令了。其实当你全局安装一个npm包之后,这个包被存放在/usr/locla/lib/node_modules下。而在这个包的package.json文件中,在bin属性下配置的执行命令,会放在/usr/locla/bin文件中。当你在命令行执行这个命令,系统就会执行/usr/local/bin 目录下对应的文件。

          以全局安装vue-cli为例,为大家简述一下安装过程。

          1.npm install -g @vue/cli

          安装vue包到/usr/local/lib/node_modules

          2. 查找vue包的package.json中的bin属性

          3. 将vue命令的执行文件添加到/usr/locla/bin中

          4. 在命令行中执行vue create vue-test,命令被识别

    2. 局部安装

      1. 在特定项目中执行npm install xxx,那么这个包会被安装在这个项目的node_moduels目录下。但是如果你在这个项目中直接执行包中的命令,就会发现控制台报错,告诉你这个命令找不到。这时候有两个解决方法:
        1. 使用npx执行:npx出现主要解决的问题就是调用项目内部安装的模块,所以你可以在项目中执行npx 包命令

        2. 在package.json文件中配置:

          "scripts": {
              "包命令": "包命令",
          }
          
        3. 原理: 在本地安装一个包之后,这个包的命令会被添加到项目的node_modules/.bin 文件中。执行npm run 命令,package.json中的scripts会按照一定顺序寻找对应命令的位置,本地的node_modules/.bin也在寻找的清单中。所以本地安装的包的命令可以执行。

    3. nvm原理

      nvm实现原理

      一般大抵这种软件的实现原理都是在一个目录下存放多个版本的目录,在切换的时候,将相应的版本路径加入PATH中,从而实现版本的切换。

    4. npx
      1.

       `npx的原理很简单,就是运行的时候,回到node_modules/.bin路径和环境变量$PATH里面,检查命令是否存在。由于npx会检查环境变量$PATH,所以系统命令也可以调用。`
       
       ```
       npx ls //等同于ls
       ```
       
       `注意:Bash内置的命令不在$PATH里面,所以不能用。比如,cd是Bash命令,因此就不能用npx cd。`
      
       ### **`避免全局安装`**
       
       `除了调用项目内部模块,npx还能避免全局安装的模块。比如,create-react-app这个模块是全局安装,npx可以运行它,而且不进行全局安装。npx create-react-app my-react-app上面代码运行时,npx将create-react-app下载到一个临时目录,使用以后再删除。所以,以后再次执行上面的命令,会重新下载create-react-app`
       
       `下载全局模块时,npx允许指定版本npx uglify-js@3.1.0 main.js -o ./dist/main.js上面代码指定使用3.1.0版本的uglify-js压缩脚本注意,只要npx后面的模块无法在本地发现,就会下载同名模块。比如,本地没有安装http-server模块,下面的命令会自动下载该模块,在当前目录启动一个web服务。npx http-server`
      
posted @ 2022-06-17 16:52  Mmonologue  阅读(1037)  评论(0编辑  收藏  举报