<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>#JavaScript - Yevpt&apos;s Blog</title>
    <link>https://www.yevpt.com</link>
    <description>Yevpt&apos;s Blog 「JavaScript」标签下的文章</description>
    <language>zh-CN</language>
    <lastBuildDate>Sun, 05 Jul 2026 04:19:04 GMT</lastBuildDate>
    <atom:link href="https://www.yevpt.com/tags/5/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>使用 Nvm 搭建 Node 环境</title>
      <link>https://www.yevpt.com/articles/50</link>
      <guid isPermaLink="true">https://www.yevpt.com/articles/50</guid>
      <pubDate>Sun, 05 Jul 2026 04:19:04 GMT</pubDate>
      <description>每次查询我的笔记，总是需要在我记录的多份Node相关搭建中选择，出于整洁强迫症的需求，现在抽出时间整理成了一篇。本篇，不仅记录了Node环境在Linux、Win、Mac上的搭建...</description>
      <category>编程</category>
      <content:encoded><![CDATA[<p>每次查询我的笔记，总是需要在我记录的多份Node相关搭建中选择，出于整洁强迫症的需求，现在抽出时间整理成了一篇。本篇，不仅记录了Node环境在Linux、Win、Mac上的搭建方案，还给出了在使用过程可能遇到的问题的解决方案以供参考。</p>
<h1 id="1-安装nvm">1. 安装Nvm</h1>
<p>虽然可以直接在官网下载Node最新版本进行安装与配置。但是出于对于多版本切换的需求以及可能性，我的主张一直是尽可能地直接安装Nvm，一个Node的版本管理工具。</p>
<h2 id="11-linux环境">1.1 Linux环境</h2>
<p>使用<a href="https://github.com/nvm-sh/nvm" rel="noopener noreferrer" target="_blank">nvm-sh</a>进行安装，可以查看nvm-sh的网站查看最新版本的安装脚本。</p>
<h3 id="111-使用脚本下载安装">1.1.1 使用脚本下载安装</h3>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
</code></pre></div>
<p>注意：如果此脚本无法执行成功，一般是国内服务器的网络不通。
可以访问<a href="https://www.ipaddress.com/" rel="noopener noreferrer" target="_blank">IPAddress.com</a>，<a href="http://xn--raw-0v1en65z.githubusercontent.com/" rel="noopener noreferrer" target="_blank">输入raw.githubusercontent.com</a>，查询到真实IP地址。
然后修改hosts解锁真实ip，操作如下：</p>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>-- 1. 打开并编辑hosts文件
sudo vi /etc/hosts
-- 2. 在hosts文件中填写以下内容，*.*.*.*为刚才查询到的真实ip
*.*.*.* raw.githubusercontent.com
</code></pre></div>
<h3 id="112-关掉并重新打开shell">1.1.2 关掉并重新打开Shell</h3>
<h3 id="113-查看nvm版本">1.1.3 查看Nvm版本</h3>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>nvm --version
</code></pre></div>
<p>使用此脚本安装的Nvm对应的安装目录如下：
ROOT用户：/root/.nvm
其他用户：/home/username/.nvm</p>
<h3 id="114-更换nvm为淘宝源">1.1.4 更换Nvm为淘宝源</h3>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>-- 1. 打开环境配置文件
vi ~/.bash_profile 
-- 2. 输入以下环境配置，修改镜像为淘宝源
NVM_NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node
-- 3. 执行以下命令，使其生效
source ~/.bash_profile
</code></pre></div>
<h2 id="12-win环境">1.2 Win环境</h2>
<h3 id="121-安装">1.2.1 安装</h3>
<p>访问<a href="https://github.com/coreybutler/nvm-windows/releases" rel="noopener noreferrer" target="_blank">nvm-windows</a>，并下载nvm-setup.zip。
下载完成后解压，点击安装即可。无需任何配置。</p>
<p>需要注意的是，在安装之前，请务必卸载或删除以下内容：</p>
<ul>
<li>任何存在的node版本</li>
<li>现有的nodejs安装目录（例如：C:\Program Files\nodejs）</li>
<li>现有的NPM目录（例如C:\Users\xxx\AppData\Roaming\npm）</li>
</ul>
<h3 id="122-更换源">1.2.2 更换源</h3>
<p>安装目录下，找到settings.txt并添加以下内容：</p>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>node_mirror: https://npm.taobao.org/mirrors/node
npm_mirror: https://npm.taobao.org/mirrors/npm
</code></pre></div>
<h2 id="13-mac环境">1.3 Mac环境</h2>
<p>在Mac下安装Nvm，首先请注意，不要使用Homebrew进行安装!原因如下：</p>
<blockquote>
<p>Homebrew installation is not supported. If you have issues with homebrew-installed nvm, please brew uninstall it, and install it using the instructions below, before filing an issue.</p>
</blockquote>
<p>出自 <a href="https://github.com/creationix/nvm" rel="noopener noreferrer" target="_blank">Nvm 官方文档</a></p>
<p>接下来说下正确的安装方式：</p>
<h3 id="131-安装">1.3.1 安装</h3>
<p>终端执行命令：</p>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.37.2/install.sh | bash
</code></pre></div>
<h3 id="132-测试是否安装成功">1.3.2 测试是否安装成功</h3>
<p>终端输入nvm list 看是否成功执行。
如果一切正常，此时NVM应可以在终端使用。
因为之前的安装命令会在.bash_profile文件中加入：</p>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>export NVM_DIR="/Users/$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] &#x26;&#x26; . "$NVM_DIR/nvm.sh"  # This loads nvm
</code></pre></div>
<h3 id="133-更换源">1.3.3 更换源</h3>
<p>在.bash_profile中加入：</p>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node

</code></pre></div>
<p>同时让.bash_profile的更改即时生效</p>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>source .bash_profile
</code></pre></div>
<h1 id="2-使用nvm安装管理node版本">2. 使用Nvm安装、管理Node版本</h1>
<h2 id="21-安装node">2.1 安装Node</h2>
<h3 id="211-查看当前所有可以安装的版本">2.1.1 查看当前所有可以安装的版本</h3>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>-- Mac OR Linux
nvm ls-remote
-- Win
nvm list available
</code></pre></div>
<h3 id="212-安装选择好的版本例如v14150">2.1.2 安装选择好的版本，例如v14.15.0</h3>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>nvm install v14.15.0 
</code></pre></div>
<h3 id="213-切换版本安装好的版本">2.1.3 切换版本安装好的版本</h3>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>nvm use v14.15.0 
</code></pre></div>
<h3 id="213-设置默认版本为切换的版本">2.1.3 设置默认版本为切换的版本</h3>
<p>如果存在旧版本，当安装了新版本，会出现使用use指令切换版本后，再次打开终端，还是使用旧版本的情况，此时，可以使用nvm alias default指定默认版本即可。</p>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>nvm alias default v14.15.0  
</code></pre></div>
<h3 id="214-测试是否安装与配置成功">2.1.4 测试是否安装与配置成功</h3>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>node -v
</code></pre></div>
<h3 id="215-linux的相关安装目录">2.1.5 Linux的相关安装目录</h3>
<p>默认全局包目录： /.nvm/versions/node/vx.x.x/lib/node_modules
默认全局bin目录：/.nvm/versions/node/vx.x.x/bin
默认配置：/user/.npmrc</p>
<h2 id="22-nvm的常用命令总结如下">2.2 Nvm的常用命令总结如下：</h2>
<ul>
<li>nvm list 当前安装的所有NODE版本</li>
<li>nvm ls-remote 查看所有的NODE可用版本</li>
<li>nvm list available 查看所有的NODE可用版本(WIN10)</li>
<li>nvm v 查看版本</li>
<li>nvm install latest 安装最新版NODE版本</li>
<li>nvm install xxx 下载你想要的版本</li>
<li>nvm use xxx 使用指定xxx版本的NODE</li>
<li>nvm alias default xxx 设置默认版本</li>
<li>nvm uninstall xxx 卸载xxx版本的NODE</li>
</ul>
<h1 id="23-更换npm源">2.3 更换Npm源</h1>
<h2 id="231-方式1-指定默认源">2.3.1 方式1 指定默认源</h2>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>npm config set registry https://registry.npm.taobao.org
</code></pre></div>
<h2 id="231-方式2-安装nrm进行源管理与切换-推荐">2.3.1 方式2 安装Nrm进行源管理与切换 （推荐）</h2>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>-- 1. 安装nrm
npm install -g nrm
-- 2. 查看可选的源，可以看到一个taobao的源
nrm ls 
-- 3. 测试相应源的响应时间
nrm test 
-- 4. 切换到taobao源
nrm use taobao
</code></pre></div>
<h2 id="232-方式3-使用cnpm不推荐">2.3.2 方式3 使用Cnpm（不推荐）</h2>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>npm install -g cnpm --registry=https://registry.npm.taobao.org
</code></pre></div>
<p>然后就可以使用Cnpm代替Npm。</p>
<p>个人不是很推荐这种方式，有时候安装依赖包会出现各种问题。</p>
<h1 id="3-npm备用命令">3. Npm备用命令</h1>
<ul>
<li>查看全局安装过的包</li>
</ul>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>npm list -g --depth 0
</code></pre></div>
<ul>
<li>升级依赖（空格选择，回车升级）</li>
</ul>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>- npm-check
- npm install -g npm-check
- npm-check -u -g
</code></pre></div>
<ul>
<li>配置Npm代理</li>
</ul>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>npm config set proxy=http://127.0.0.1:xxxx
</code></pre></div>
<h1 id="4-常见问题的解决">4. 常见问题的解决</h1>
<ul>
<li>Electron安装失败</li>
</ul>
<p>安装Electron时，可能会出现安装缓慢，甚至无法安装的问题，此时替换下Electron源即可。</p>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>npm config set ELECTRON_MIRROR https://npm.taobao.org/mirrors/electron
</code></pre></div>
<ul>
<li>node-sass安装失败的问题</li>
</ul>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass
</code></pre></div>
<ul>
<li>windows-build-tools</li>
</ul>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>npm install --global --production windows-build-tools
npm config set python "C:\\\\Users\\\\xxx\\\\AppData\\\\Local\\\\Programs\\\\Python\\\\Python39\\\\python.exe"
</code></pre></div>
<ul>
<li>Npm或者Yarn安装chromedriver时失败</li>
</ul>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>npm config set chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver
yarn config set "chromedriver_cdnurl" "https://npm.taobao.org/mirrors/chromedriver"

</code></pre></div>
<ul>
<li>list -g lead to npm ERR! missing error?</li>
</ul>
<div class="md-code-wrapper"><button class="md-copy-btn md-copy-btn-abs" type="button" aria-label="复制代码"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"></rect><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"></path></svg></button><pre><code>npm update -g --verbose
</code></pre></div>
<h1 id="5-参考">5 参考</h1>
<ul>
<li><a href="https://www.cnblogs.com/sean-/p/5593515.html" rel="noopener noreferrer" target="_blank">nvm 解决nodejs无法全局/usr/bin/node问题</a></li>
<li><a href="https://github.com/creationix/nvm" rel="noopener noreferrer" target="_blank">nvm-github</a></li>
<li><a href="http://www.imooc.com/article/14617" rel="noopener noreferrer" target="_blank">正确的安装和使用nvm(mac)</a></li>
</ul>]]></content:encoded>
    </item>
  </channel>
</rss>