<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>nvm｜林鼎淵 Dean Lin</title>
    <link>https://deanlin.net/tags/nvm/</link>
    <image><url>https://deanlin.net/images/author_hu_aa256fc934e9a932.jpg</url><title>nvm｜林鼎淵 Dean Lin</title><link>https://deanlin.net/tags/nvm/</link><width>144</width><height>144</height></image>
    <description>林鼎淵（Dean Lin）的部落格：生成式 AI 企業內訓講師、外商資安公司軟體專家、7 本書作者。400 多篇文章用白話分享生成式 AI 實戰、Claude Code 與 Vibe Coding 教學、團隊合作與職場成長。</description>
    <generator>Hugo</generator>
    <language>zh-tw</language>
    <copyright>© 2020–2026 林鼎淵 Dean Lin</copyright>
    <lastBuildDate>Wed, 26 Oct 2022 23:01:53 +0800</lastBuildDate>
    <atom:link href="https://deanlin.net/tags/nvm/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>使用 nvm &#43; .nvmrc 讓 Node.js 版本在不同的專案間自動切換</title>
      <link>https://deanlin.net/blog/202210/nvm-nvmrc-auto-switch/</link>
      <pubDate>Wed, 26 Oct 2022 23:01:53 +0800</pubDate>
      <guid>https://deanlin.net/blog/202210/nvm-nvmrc-auto-switch/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>技術教學</category>
      <description>Node.js 版本更新速度極快，但未必所有套件都能相容於新的版本，這造成每個專案的 Node.js 版本不盡相同；所以今天要介紹如何透過 .nvmrc 搭配 zsh or bash script 讓你在專案間自動切換 Node.js 版本。</description>
      <media:content url="https://deanlin.net/blog/202210/nvm-nvmrc-auto-switch/images/nvm-nvmrc-auto-switch-og_hu_5470ca57d11f8c34.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>Node.js 版本更新速度極快，但未必所有套件都能相容於新的版本，這造成每個專案的 Node.js 版本不盡相同；即使 nvm 可以幫我們快速切換 Node.js 版本還是不太方便，所以今天要介紹如何透過 .nvmrc 搭配 zsh or bash script 讓你在專案間自動切換 Node.js 版本。</p>
<p><img src="https://deanlin.net/blog/202210/nvm-nvmrc-auto-switch/images/nvm-nvmrc-auto-switch-01.webp" width="1400" height="731" alt="使用 nvm &#43; .nvmrc 讓 Node.js 版本在不同的專案間自動切換（圖 1）" fetchpriority="high" decoding="async"></p>
<blockquote>
<p>筆者原本選用「avn」這個套件，但它真的已經年久失修了無法使用<a href="https://github.com/wbyoung/avn/issues/109#issuecomment-945155272">連結</a></p>
</blockquote>
<h2 id="step-1建立兩個-nodejs-專案">STEP 1：建立兩個 Node.js 專案<a class="h-anchor" href="#step-1%e5%bb%ba%e7%ab%8b%e5%85%a9%e5%80%8b-nodejs-%e5%b0%88%e6%a1%88" aria-label="這個段落的連結"></a></h2>
<p>在終端機複製貼上下方指令即可。</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>mkdir project-a
</span></span><span style="display:flex;"><span>cd project-a
</span></span><span style="display:flex;"><span>npm init -y
</span></span><span style="display:flex;"><span>cd ..
</span></span><span style="display:flex;"><span>mkdir project-b
</span></span><span style="display:flex;"><span>cd project-b
</span></span><span style="display:flex;"><span>npm init -y
</span></span><span style="display:flex;"><span>cd ..
</span></span></code></pre></div><h2 id="step-2安裝特定的-nodejs-版本以供測試">STEP 2：安裝特定的 Node.js 版本以供測試<a class="h-anchor" href="#step-2%e5%ae%89%e8%a3%9d%e7%89%b9%e5%ae%9a%e7%9a%84-nodejs-%e7%89%88%e6%9c%ac%e4%bb%a5%e4%be%9b%e6%b8%ac%e8%a9%a6" aria-label="這個段落的連結"></a></h2>
<p>尚未 nvm 安裝的讀者，可以先透過如下指令安裝，更新的版本請參考<a href="https://github.com/nvm-sh/nvm#installing-and-updating">連結</a>。</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
</span></span></code></pre></div><p>安裝完後建議重開終端機讓它生效，接著透過它安裝 Node.js 特定版本：</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nvm install <span style="color:#a5d6ff">12</span>
</span></span><span style="display:flex;"><span>nvm install <span style="color:#a5d6ff">16</span>
</span></span></code></pre></div><h2 id="step-3在兩個-nodejs-專案中加入nvmrc並指定-nodejs-版本">STEP 3：在兩個 Node.js 專案中加入「.nvmrc」並指定 Node.js 版本<a class="h-anchor" href="#step-3%e5%9c%a8%e5%85%a9%e5%80%8b-nodejs-%e5%b0%88%e6%a1%88%e4%b8%ad%e5%8a%a0%e5%85%a5nvmrc%e4%b8%a6%e6%8c%87%e5%ae%9a-nodejs-%e7%89%88%e6%9c%ac" aria-label="這個段落的連結"></a></h2>
<p>接下來我們就分別在兩個專案中新增「.nvmrc」的檔案，並個別指定 12、16 版本方便測試（讀者在終端機複製貼上下方指令即可）。</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cd project-a
</span></span><span style="display:flex;"><span>touch .nvmrc
</span></span><span style="display:flex;"><span>echo <span style="color:#a5d6ff">&#34;12&#34;</span> &gt;&gt; .nvmrc
</span></span><span style="display:flex;"><span>cd ..
</span></span><span style="display:flex;"><span>cd project-b
</span></span><span style="display:flex;"><span>touch .nvmrc
</span></span><span style="display:flex;"><span>echo <span style="color:#a5d6ff">&#34;16&#34;</span> &gt;&gt; .nvmrc
</span></span><span style="display:flex;"><span>cd ..
</span></span></code></pre></div><blockquote>
<p>筆者為了方便 Demo 而指定大版本，「.nvmrc」檔案是能吃「x.y.z」版本號的。</p>
</blockquote>
<h2 id="step-4調整-zsh-script">STEP 4：調整 zsh script<a class="h-anchor" href="#step-4%e8%aa%bf%e6%95%b4-zsh-script" aria-label="這個段落的連結"></a></h2>
<p>在終端機輸入 <code>vi ~/.zshrc</code>（每個人的路徑可能不同），到最後一行貼上下方 script：</p>
<pre tabindex="0"><code># place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version=&#34;$(nvm version)&#34;
  local nvmrc_path=&#34;$(nvm_find_nvmrc)&#34;
  if [ -n &#34;$nvmrc_path&#34; ]; then
    local nvmrc_node_version=$(nvm version &#34;$(cat &#34;${nvmrc_path}&#34;)&#34;)
    if [ &#34;$nvmrc_node_version&#34; = &#34;N/A&#34; ]; then
      nvm install
    elif [ &#34;$nvmrc_node_version&#34; != &#34;$node_version&#34; ]; then
      nvm use
    fi
  elif [ &#34;$node_version&#34; != &#34;$(nvm version default)&#34; ]; then
    echo &#34;Reverting to nvm default version&#34;
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
</code></pre><p>儲存後再輸入 <code>source ~/.zshrc</code> 即可讓 script 生效。</p>
<p>這邊簡單說明 script 運行邏輯：</p>
<ul>
<li>資料夾下<strong>有</strong>「.nvmrc」的檔案：若指定的 Node.js 版本已安裝就透過「nvm use」切換，假使該版本尚未安裝就會執行「nvm install」。</li>
<li>資料夾下<strong>沒有</strong>「.nvmrc」的檔案：切換回 Node.js 默認的版本。</li>
</ul>
<p>唯一要注意的是，<strong>記得把這段 script 放在 nvm 初始化後的位置</strong>（或是直接放在最後面也可以）。</p>
<blockquote>
<p>上面的 script 參考自 nvm 官網，如果讀者使用的是 bash script 請參考<a href="https://github.com/nvm-sh/nvm#bash">連結</a>。</p>
</blockquote>
<h2 id="step-5實測是否有效">STEP 5：實測是否有效<a class="h-anchor" href="#step-5%e5%af%a6%e6%b8%ac%e6%98%af%e5%90%a6%e6%9c%89%e6%95%88" aria-label="這個段落的連結"></a></h2>
<p>筆者在開頭故意切換到 Node.js 18 的版本，然後再依序切換到「project-a」以及「project-b」的資料夾，從下圖大家可以看到 Node.js 的版本都順利切換嚕！</p>
<p><img src="https://deanlin.net/blog/202210/nvm-nvmrc-auto-switch/images/nvm-nvmrc-auto-switch-02.webp" width="701" height="218" alt="STEP 5：實測是否有效（圖 2）" loading="lazy" decoding="async"></p>
<blockquote class="pullquote"><p>希望這篇文章，有幫大家解決不同專案的 Node.js 版本切換之苦～</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>工程師的開發環境大補帖：Node.js、NVM、git、yarn、VSCode</title>
      <link>https://deanlin.net/blog/202101/developer-environment-setup/</link>
      <pubDate>Fri, 15 Jan 2021 11:21:18 +0800</pubDate>
      <guid>https://deanlin.net/blog/202101/developer-environment-setup/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>技術教學</category>
      <description>工欲善其事，必先利其器</description>
      <media:content url="https://deanlin.net/blog/202101/developer-environment-setup/images/developer-environment-setup-og_hu_47edff0bf094e58d.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p><img src="https://deanlin.net/blog/202101/developer-environment-setup/images/developer-environment-setup-01.webp" width="1400" height="694" alt="工程師的開發環境大補帖：Node.js、NVM、git、yarn、VSCode（圖 1）" fetchpriority="high" decoding="async"></p>
<blockquote>
<p><em>工欲善其事，必先利其器</em></p>
</blockquote>
<h2 id="為什麼寫這篇文章">為什麼寫這篇文章？<a class="h-anchor" href="#%e7%82%ba%e4%bb%80%e9%ba%bc%e5%af%ab%e9%80%99%e7%af%87%e6%96%87%e7%ab%a0" aria-label="這個段落的連結"></a></h2>
<p>因為我自己在<code>剛接觸程式時最痛恨的就是環境設定</code><br>不知道是我跟電腦不合還是怎樣，每次我學新東西的時候總是在環境設定這個環節卡的不要不要的<br>為了避免讀者在之後實戰的文章中一邊看一邊心理罵:「<strong>為什麼我們程式一模一樣但我的就是會錯?</strong>」這樣的憾事發生，所以我決定詳細的說明這個專案所需安裝的一切環境，並附上我本機安裝的工具版本，讓大家在日後的文章中可以順利操作與學習</p>
<blockquote>
<p><em>你們實際操作時通常都有新的版本了，如果最新版本有問題可以切換到筆者的版本來操作</em></p>
</blockquote>
<h2 id="需要安裝哪些工具">需要安裝哪些工具<a class="h-anchor" href="#%e9%9c%80%e8%a6%81%e5%ae%89%e8%a3%9d%e5%93%aa%e4%ba%9b%e5%b7%a5%e5%85%b7" aria-label="這個段落的連結"></a></h2>
<blockquote>
<p><code>說明包含 windows/mac 兩個系統的設定</code></p>
</blockquote>
<ol>
<li><a href="https://deanlin.net/blog/202101/developer-environment-setup/#e634">Node.js</a></li>
<li><a href="https://deanlin.net/blog/202101/developer-environment-setup/#8082">NVM</a></li>
<li><a href="https://deanlin.net/blog/202101/developer-environment-setup/#6dcd">git</a></li>
<li><a href="https://deanlin.net/blog/202101/developer-environment-setup/#bf69">yarn</a></li>
<li><a href="https://deanlin.net/blog/202101/developer-environment-setup/#d582">VSCode</a></li>
</ol>
<h2 id="開發環境介紹--設定">開發環境介紹 &amp; 設定<a class="h-anchor" href="#%e9%96%8b%e7%99%bc%e7%92%b0%e5%a2%83%e4%bb%8b%e7%b4%b9--%e8%a8%ad%e5%ae%9a" aria-label="這個段落的連結"></a></h2>
<h2 class="h-nomark" id="1-nodejs-官網">1. Node.js <a href="https://nodejs.org/en/about/">官網</a><a class="h-anchor" href="#1-nodejs-%e5%ae%98%e7%b6%b2" aria-label="這個段落的連結"></a></h2>
<p><img src="https://deanlin.net/blog/202101/developer-environment-setup/images/developer-environment-setup-02.webp" width="119" height="73" alt="1. Node.js 官網（圖 2）" loading="lazy" decoding="async"></p>
<p>能夠在 server 端運行 JavaScript 的開放原始碼、跨平台 JavaScript 的執行環境。前端工程師的福音</p>
<blockquote>
<p><em>筆者安裝的版本：v16.19.1 (使用nvm安裝，後面會介紹)</em></p>
</blockquote>
<hr>
<h2 class="h-nomark" id="2-nvm-官網">2. nvm <a href="https://github.com/nvm-sh/nvm">官網</a><a class="h-anchor" href="#2-nvm-%e5%ae%98%e7%b6%b2" aria-label="這個段落的連結"></a></h2>
<p>由於 Node.js 更新速度是非常快的，而許多套件有 Node.js 版本的相依性，透過NVM你可以輕鬆切換 Node.js 版本來符合不同專案的使用環境</p>
<h3 id="-windows-安裝步驟">windows 安裝步驟<a class="h-anchor" href="#-windows-%e5%ae%89%e8%a3%9d%e6%ad%a5%e9%a9%9f" aria-label="這個段落的連結"></a></h3>
<ol>
<li>先進入<a href="https://github.com/coreybutler/nvm-windows/releases">windows下載頁面</a></li>
<li>選擇最新版本的下載 <strong>nvm-setup.zip</strong>(筆者版本為1.1.7，你看到這篇文章時可能有提供更新的版本)</li>
</ol>
<p><img src="https://deanlin.net/blog/202101/developer-environment-setup/images/developer-environment-setup-03.webp" width="1400" height="841" alt="windows 安裝步驟（圖 3）" loading="lazy" decoding="async"></p>
<p>3. 下載後一路瘋狂下一步即可</p>
<p>4. 安裝後開啟命令提示字元(CMD)</p>
<p>5. 在 CMD 輸入指令確認 nvm 是否安裝成功</p>
<p><img src="https://deanlin.net/blog/202101/developer-environment-setup/images/developer-environment-setup-04.webp" width="1200" height="591" alt="windows 安裝步驟（圖 4）" loading="lazy" decoding="async"></p>
<h3 id="-mac-安裝步驟">mac 安裝步驟<a class="h-anchor" href="#-mac-%e5%ae%89%e8%a3%9d%e6%ad%a5%e9%a9%9f" aria-label="這個段落的連結"></a></h3>
<ol>
<li>打開終端機(Terminal)，以下步驟皆在終端機操作</li>
<li>mac 建議先下載 Homebrew</li>
</ol>
<pre tabindex="0"><code>/bin/bash -c &#34;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)&#34;
</code></pre><p>3. 下載後安裝 nvm</p>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>brew install nvm
</span></span></code></pre></div><p>4. 在終端機輸入指令確認 nvm 是否安裝成功</p>
<p><img src="https://deanlin.net/blog/202101/developer-environment-setup/images/developer-environment-setup-05.webp" width="1400" height="553" alt="mac 安裝步驟（圖 5）" loading="lazy" decoding="async"></p>
<h3 id="-用-nvm-安裝-nodejs">用 NVM 安裝 node.js<a class="h-anchor" href="#-%e7%94%a8-nvm-%e5%ae%89%e8%a3%9d-nodejs" aria-label="這個段落的連結"></a></h3>
<ul>
<li><code>指令：nvm install [version]</code></li>
<li>請切記要安裝一個 Node.js 版本(請選用<a href="https://nodejs.org/en/">LTS版本</a>)，不然你寫的程式會沒有可以運行的環境</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nvm install 16.19.1
</span></span></code></pre></div><blockquote>
<p>筆者nvm安裝版本：0.39.3</p>
</blockquote>
<hr>
<h2 class="h-nomark" id="3-git-官網">3. git <a href="https://git-scm.com/">官網</a><a class="h-anchor" href="#3-git-%e5%ae%98%e7%b6%b2" aria-label="這個段落的連結"></a></h2>
<p><img src="https://deanlin.net/blog/202101/developer-environment-setup/images/developer-environment-setup-06.webp" width="200" height="84" alt="3. git 官網（圖 6）" loading="lazy" decoding="async"></p>
<p>這是對於程式版本控制的工具，透過他你可以輕鬆回到過去，並且在多人協作時也能有效管控<br><a href="https://git-scm.com/download/win">windows下載頁面</a>、<a href="https://git-scm.com/download/mac">mac下載頁面</a></p>
<blockquote>
<p><em>我有朋友使用 windows 怎麼樣都無法正常安裝 git，如果你也遇到了這個不幸，你還是有<a href="https://desktop.github.com/">Git桌面板</a>可以選擇的</em></p>
</blockquote>
<h3 id="常用指令">常用指令<a class="h-anchor" href="#%e5%b8%b8%e7%94%a8%e6%8c%87%e4%bb%a4" aria-label="這個段落的連結"></a></h3>
<ul>
<li>抓取遠端數據庫(僅確認有什麼更新，不合併)</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git fetch
</span></span></code></pre></div><ul>
<li>抓取遠端數據庫更新</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git pull
</span></span></code></pre></div><ul>
<li>更新遠端數據庫</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>git push
</span></span></code></pre></div><blockquote>
<p><em>筆者windows git安裝版本：2.27.0.windows.1</em></p>
</blockquote>
<hr>
<h2 class="h-nomark" id="4-yarn">4. yarn<a class="h-anchor" href="#4-yarn" aria-label="這個段落的連結"></a></h2>
<p><img src="https://deanlin.net/blog/202101/developer-environment-setup/images/developer-environment-setup-07.webp" width="160" height="84" alt="4. yarn（圖 7）" loading="lazy" decoding="async"></p>
<p>這是專門安裝套件的軟體，站在巨人的肩膀上你才能看得更遠，妥善運用別人提供的套件，程式的路能走得更遠<br><a href="https://classic.yarnpkg.com/lang/en/">下載頁面</a></p>
<h3 id="常用指令-1">常用指令<a class="h-anchor" href="#%e5%b8%b8%e7%94%a8%e6%8c%87%e4%bb%a4-1" aria-label="這個段落的連結"></a></h3>
<ul>
<li>依據 package.json 安裝所有套件</li>
</ul>
<pre tabindex="0"><code>yarn
</code></pre><ul>
<li>安裝到 dependencies</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>yarn add <span style="color:#ff7b72;font-weight:bold">[</span>package<span style="color:#ff7b72;font-weight:bold">]</span>
</span></span></code></pre></div><ul>
<li>安裝到 devDependencies</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>yarn add <span style="color:#ff7b72;font-weight:bold">[</span>package<span style="color:#ff7b72;font-weight:bold">]</span> –save-dev
</span></span></code></pre></div><ul>
<li>全域安裝套件(使該套件可在電腦任何位置被呼叫)</li>
</ul>
<div class="highlight"><pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>yarn global add <span style="color:#ff7b72;font-weight:bold">[</span>package<span style="color:#ff7b72;font-weight:bold">]</span>
</span></span></code></pre></div><blockquote>
<p><em>筆者yarn安裝版本：1.19.2</em></p>
</blockquote>
<hr>
<h2 class="h-nomark" id="5-vscode-官網">5. VScode <a href="https://code.visualstudio.com/">官網</a><a class="h-anchor" href="#5-vscode-%e5%ae%98%e7%b6%b2" aria-label="這個段落的連結"></a></h2>
<p><img src="https://deanlin.net/blog/202101/developer-environment-setup/images/developer-environment-setup-08.webp" width="80" height="80" alt="5. VScode 官網（圖 8）" loading="lazy" decoding="async"></p>
<p>現在已經過了用記事本在打程式的年代了，透過 IDE(整合開發環境)可以大幅增加你撰寫程式的速度<br><a href="https://code.visualstudio.com/">VScode下載頁面</a></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
