<?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>Git｜林鼎淵 Dean Lin</title>
    <link>https://deanlin.net/tags/git/</link>
    <image><url>https://deanlin.net/images/author_hu_aa256fc934e9a932.jpg</url><title>Git｜林鼎淵 Dean Lin</title><link>https://deanlin.net/tags/git/</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>Sun, 28 Sep 2025 19:36:06 +0800</lastBuildDate>
    <atom:link href="https://deanlin.net/tags/git/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Cursor 教學：安裝 3 款讓 Vibe Coding 效率翻倍的工具！用「個人形象網站」實戰演練</title>
      <link>https://deanlin.net/blog/202509/cursor-productivity-extensions/</link>
      <pubDate>Sun, 28 Sep 2025 19:36:06 +0800</pubDate>
      <guid>https://deanlin.net/blog/202509/cursor-productivity-extensions/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>AI 實戰</category>
      <description>在這篇文章中，我會示範安裝 3 款工具，讓 Cursor AI Agent 效率直接翻倍，並以「個人形象網站」為例，完整實戰給你看！</description>
      <media:content url="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-og_hu_a51633a2c6413bdb.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<p>最近幫企業上 Vibe Coding 的課程時，除了請他們安裝 Cursor 外。</p>
<p>在課程中還會透過實際範例，分享哪些工具安裝後，可以提升 Vibe Coding 的效率。</p>
<p>因為其實有很多的需求，根本不需要寫程式，直接使用別人完成的套件就好。</p>
<p>你也不用煩惱該使用哪個套件，以及套件該如何使用；因為安裝好這些工具後，AI Agent 會根據你提出的需求，自行判斷這些工具使用的時機點。</p>
<blockquote>
<p>建議搭配影片觀看實際的操作步驟。</p>
</blockquote>
<div class="yt" data-yt="5DEV_K0JauQ" data-title="【Cursor 教學】安裝 3 款讓 Vibe Coding 效率翻倍的工具！用「個人形象網站」實戰演練 #python #nodejs #nvm #git #ai #vibecoding">
  <a class="yt-link" href="https://www.youtube.com/watch?v=5DEV_K0JauQ" target="_blank" rel="noopener" aria-label="播放影片：【Cursor 教學】安裝 3 款讓 Vibe Coding 效率翻倍的工具！用「個人形象網站」實戰演練 #python #nodejs #nvm #git #ai #vibecoding">
    <img src="https://i.ytimg.com/vi/5DEV_K0JauQ/hqdefault.jpg" alt="" width="480" height="360" loading="lazy" decoding="async">
    <span class="yt-play" aria-hidden="true"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M8 5.2v13.6L19 12z"/></svg></span>
    <span class="yt-title">【Cursor 教學】安裝 3 款讓 Vibe Coding 效率翻倍的工具！用「個人形象網站」實戰演練 #python #nodejs #nvm #git #ai #vibecoding</span>
  </a>
</div>

<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-01.webp" width="1233" height="690" alt="Cursor 教學：安裝 3 款讓 Vibe Coding 效率翻倍的工具！用「個人形象網站」實戰演練（圖 1）" fetchpriority="high" decoding="async"></p>
<pre tabindex="0"><code>文章大綱

① 突破 AI Agent 限制，用 Python 自動萃取文件、網路爬蟲
② 安裝 Node.js，讓 AI 生成漂亮、專業的形象網頁
③ 加入 Git 版控，Vibe Coding 放心爆改
</code></pre><p>在這篇文章中，我會帶你一步步操作，讓你看完後也能打造出屬於自己的個人形象網站！</p>
<blockquote>
<p><a href="https://youtu.be/kVniOF36GEk">如果你是第一次接觸 Cursor，可以先看這隻影片。</a></p>
</blockquote>
<hr>
<h3 id="文章開始前先提醒一下大家">文章開始前，先提醒一下大家：<a class="h-anchor" href="#%e6%96%87%e7%ab%a0%e9%96%8b%e5%a7%8b%e5%89%8d%e5%85%88%e6%8f%90%e9%86%92%e4%b8%80%e4%b8%8b%e5%a4%a7%e5%ae%b6" aria-label="這個段落的連結"></a></h3>
<h3 id="ai-agent-的功能非常強大給他權限後不僅能自動安裝所需套件執行指令還能新增修改甚至刪除檔案因此使用時務必小心">AI Agent 的功能非常強大，給他權限後，不僅能自動安裝所需套件、執行指令，還能新增、修改甚至刪除檔案，因此使用時務必小心。<a class="h-anchor" href="#ai-agent-%e7%9a%84%e5%8a%9f%e8%83%bd%e9%9d%9e%e5%b8%b8%e5%bc%b7%e5%a4%a7%e7%b5%a6%e4%bb%96%e6%ac%8a%e9%99%90%e5%be%8c%e4%b8%8d%e5%83%85%e8%83%bd%e8%87%aa%e5%8b%95%e5%ae%89%e8%a3%9d%e6%89%80%e9%9c%80%e5%a5%97%e4%bb%b6%e5%9f%b7%e8%a1%8c%e6%8c%87%e4%bb%a4%e9%82%84%e8%83%bd%e6%96%b0%e5%a2%9e%e4%bf%ae%e6%94%b9%e7%94%9a%e8%87%b3%e5%88%aa%e9%99%a4%e6%aa%94%e6%a1%88%e5%9b%a0%e6%ad%a4%e4%bd%bf%e7%94%a8%e6%99%82%e5%8b%99%e5%bf%85%e5%b0%8f%e5%bf%83" aria-label="這個段落的連結"></a></h3>
<h2 class="h-nomark" id="-突破-ai-agent-限制用-python-自動萃取文件網路爬蟲">① 突破 AI Agent 限制，用 Python 自動萃取文件、網路爬蟲<a class="h-anchor" href="#-%e7%aa%81%e7%a0%b4-ai-agent-%e9%99%90%e5%88%b6%e7%94%a8-python-%e8%87%aa%e5%8b%95%e8%90%83%e5%8f%96%e6%96%87%e4%bb%b6%e7%b6%b2%e8%b7%af%e7%88%ac%e8%9f%b2" aria-label="這個段落的連結"></a></h2>
<p>第一個建議大家安裝的工具是 Python。</p>
<p>我們安裝 Python 不是為了寫程式，而是為了讓 AI Agent 在面對問題時，有更多的解決方案。</p>
<h3 id="-安裝-python">安裝 Python<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-python" aria-label="這個段落的連結"></a></h3>
<p>安裝 Python 這塊，大家可以直接到<a href="http://python.org/downloads/">官網</a>，根據自己的作業系統下載安裝檔即可。</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-02.webp" width="1400" height="753" alt="安裝 Python（圖 2）" loading="lazy" decoding="async"></p>
<p>安裝步驟我就不再贅述，安裝完成後，我們可以在 Cursor 打開一個新的終端機，然後輸入</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>python --version
</span></span></code></pre></div><p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-03.webp" width="741" height="181" alt="安裝 Python（圖 3）" loading="lazy" decoding="async"></p>
<p>如果有出現版號，就代表有順利安裝，接下來讓我們進入到實戰階段。</p>
<blockquote>
<p>若輸入 <code>python &ndash;version</code> 沒有反應，請改用 <code>python3 &ndash;version</code></p>
</blockquote>
<h3 id="-提取文件資訊">提取文件資訊<a class="h-anchor" href="#-%e6%8f%90%e5%8f%96%e6%96%87%e4%bb%b6%e8%b3%87%e8%a8%8a" aria-label="這個段落的連結"></a></h3>
<p>像有些人會把 Cursor 當成 RAG 的工具使用，透過他快速檢索、分析、統整資訊。</p>
<p>但他有一個痛點，就是 Cursor 只能檢索「文字檔」，比如 Markdown/txt 這類型的文件，或是 JavaScript/Python 這類的程式。</p>
<p>假如你的檔案類型是 Word/PPT/PDF，Cursor 預設是沒辦法幫你檢索的。</p>
<p><strong>但如果有安裝 Python，這一切就變成了有可能，像這邊我在資料夾放了自己的講師履歷。</strong></p>
<p>如果今天想把裡面的文件、圖片提取出來，執行下面的指令，AI Agent 就會安裝對應的套件來解析文件，並根據需求將文件儲存成對應的 Markdown 檔案。</p>
<pre tabindex="0"><code>
資料夾有 pdf/ppt/doc 等多種格式的文件，我想請你把所有文件內的「文字」取出來，並確定可以用繁體中文顯示。
並建立一個「doc」的資料夾，用 Markdown 的格式儲存，並整理文字結構，設計合適的大標、中標、小標，方便閱讀。
如果 ppt/doc 裡面有圖片，請建立一個「img」的資料夾，圖片檔的命名，前綴請使用文件檔名。
</code></pre><p>在執行這段指令後，AI Agent 就會設計執行步驟，一開始會先安裝需要的 Python 套件，設計程式來提取文件裡面的文字、圖片。</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-04.webp" width="541" height="586" alt="提取文件資訊（圖 4）" loading="lazy" decoding="async"></p>
<p>稍等一下，我們就可以在「doc」與「img」資料夾中，看到文字與圖片有順利的提取出來；節省過去需要手動複製貼上的步驟。</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-05.webp" width="1400" height="764" alt="提取文件資訊（圖 5）" loading="lazy" decoding="async"></p>
<p>把文字提取出來後，就可以把 Cursor 當成 RAG 工具來協助統整資料了；首先把「doc」資料夾拖到 AI 的對話框，這樣 AI 才知道他要處理的內容範圍</p>
<p>接著貼上下面的 Prompt:</p>
<pre tabindex="0"><code>我是個講師，正在準備個人形象網站的素材，內容要呈現如下資訊：
- 擅長領域: 搭配可以佐證的資訊
- 個人成就: 找出可數據化的成就，展現實力的強大
- 課程資訊: 課程主題、說明、價格、受眾、預期成果
請先建立「integrate」資料夾，並將上面提到的面向用 Markdown 格式建立，並像個善於推銷自己的 KOL 般，用自信的語氣撰寫文案
</code></pre><p>這段 Prompt 我先表明自己的身份是「講師」，要求他幫我整理出「擅長領域、個人成就、課程資訊」的資訊，以此做為「個人形象網站」的素材。</p>
<p>稍等一段時間，在「integrate」資料夾，就能看到 AI 按照需求，幫我們完成了資料的彙整。</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-06.webp" width="1400" height="764" alt="提取文件資訊（圖 6）" loading="lazy" decoding="async"></p>
<h3 id="-用網頁爬蟲蒐集資訊">用網頁爬蟲蒐集資訊<a class="h-anchor" href="#-%e7%94%a8%e7%b6%b2%e9%a0%81%e7%88%ac%e8%9f%b2%e8%92%90%e9%9b%86%e8%b3%87%e8%a8%8a" aria-label="這個段落的連結"></a></h3>
<p>另外有些人會使用 AI 來蒐集網路資料，但許多網站是禁止爬蟲的。</p>
<p>這邊我打開 <a href="https://notebooklm.google.com/">NotebookLM</a> 示範給大家看，如果來源貼上用 <a href="https://chatgpt.com/s/t_68d21677946081918576092e1c2d37c1">ChatGPT 分享的對話</a>，NotebookLM 的解析是錯誤的，甚至像是 <a href="https://deanlin.net/blog/202507/afteroffice1-15-years-one-book/">Medium 這類部落格文章</a>也無法辨識</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-07.webp" width="1400" height="764" alt="用網頁爬蟲蒐集資訊（圖 7）" loading="lazy" decoding="async"></p>
<p>但如果你請 AI Agent 幫你用 Selenium 這個網路爬蟲工具，模擬真實使用者就能夠完成這項爬蟲任務了。</p>
<p>大家可以嘗試下面的指令：</p>
<pre tabindex="0"><code>先建立「crawler」資料夾，然使用 Selenium 模擬 Chrome 瀏覽器來設計爬蟲程式
取得下面 ChatGPT 分享連結的對話內容，這個網頁有反爬蟲設計，所以網頁開啟後，先等 5 秒鐘渲染元素再去抓取與 ChatGPT 的對話
https://chatgpt.com/s/t_68d21677946081918576092e1c2d37c1
抓到對話後建立「output」，將資料寫入 Markdown 檔案，檔名使用網頁標題，並優化 Markdown 格式為好閱讀的結構
</code></pre><p>這段提示詞有 2 個重點：</p>
<ul>
<li>要求 AI 使用 Selenium 模擬 Chrome 瀏覽器來設計爬蟲程式</li>
<li>提醒他網頁有反爬蟲設計，所以網頁開啟後，要先等 5 秒鐘渲染元素再去抓取與 ChatGPT 的對話</li>
</ul>
<p>稍等一段時間，在 output 的資料夾中，就能看到 Cursor 突破原有的爬蟲限制，取得與 ChatGPT 的對話內容。</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-08.webp" width="1400" height="764" alt="用網頁爬蟲蒐集資訊（圖 8）" loading="lazy" decoding="async"></p>
<p>剛好透過這個範例提醒大家，雖然我們用 Vibe Coding 完成了這個爬蟲程式。</p>
<p><strong>但他的成功是建立在指令非常明確之上，如果沒有網路爬蟲的基礎概念，AI 的失敗率是非常高的。</strong></p>
<blockquote class="pullquote"><p>專業知識，是你在 AI 時代的護城河。</p>
</blockquote>
<hr>
<h2 class="h-nomark" id="-安裝-nodejs讓-ai-生成漂亮專業的形象網頁">② 安裝 Node.js，讓 AI 生成漂亮、專業的形象網頁<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-nodejs%e8%ae%93-ai-%e7%94%9f%e6%88%90%e6%bc%82%e4%ba%ae%e5%b0%88%e6%a5%ad%e7%9a%84%e5%bd%a2%e8%b1%a1%e7%b6%b2%e9%a0%81" aria-label="這個段落的連結"></a></h2>
<p>大多數人 Vibe Coding 的第一個作品，通常是網頁。</p>
<p>但如果你只是請 Cursor 幫你設計一個公司或是個人的形象網頁，那 AI 通常是使用簡單的 HTML 與 CSS 做基礎設計。</p>
<p><strong>但如果安裝了 Node.js，你就可以直接使用知名的前端三大框架 Vue/React/Angular 來做設計。</strong></p>
<p>這些框架生成出來的結果會更符合現代審美，未來想擴充功能時，也有豐富的套件可以直接使用。</p>
<h3 id="-安裝-nodejs">安裝 Node.js<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-nodejs" aria-label="這個段落的連結"></a></h3>
<p>在安裝 Node.js 這塊，我建議大家透過 NVM 來安裝</p>
<ul>
<li><a href="https://github.com/nvm-sh/nvm?tab=readme-ov-file#installing-and-updating">Mac 執行指令就可以安裝了</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>curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
</span></span></code></pre></div><ul>
<li><a href="https://github.com/coreybutler/nvm-windows/releases">但如果你是 Windows，就需要下載 exe 檔來安裝</a></li>
</ul>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-09.webp" width="1075" height="451" alt="安裝 Node.js（圖 9）" loading="lazy" decoding="async"></p>
<p>因為 Node.js 有多個版本，而 NVM 這款工具可以幫你快速在不同版本間切換、更新。</p>
<p>nvm 安裝完成後，開啟終端機輸入 <code>nvm -v</code>，確認有成功安裝：</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-10.webp" width="767" height="221" alt="安裝 Node.js（圖 10）" loading="lazy" decoding="async"></p>
<p>接下來輸入 <code>nvm install &ndash;lts</code> 來安裝最新版本的 Node.js</p>
<p>安裝完畢後，輸入 <code>node -v</code> 便可檢視剛剛安裝與現在使用的對應版本</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-11.webp" width="767" height="229" alt="安裝 Node.js（圖 11）" loading="lazy" decoding="async"></p>
<p>完成上述步驟後，接下來就可以開始製作網頁了。</p>
<h3 id="-生成個人形象網頁">生成個人形象網頁<a class="h-anchor" href="#-%e7%94%9f%e6%88%90%e5%80%8b%e4%ba%ba%e5%bd%a2%e8%b1%a1%e7%b6%b2%e9%a0%81" aria-label="這個段落的連結"></a></h3>
<p>在前面，已經透過 AI 從 Word/PDF/PPT 裡面取出了個人資訊與相關照片，接下來我就直接示範如何用 Cursor 生成個人形象網頁的初版。</p>
<blockquote>
<p>提醒大家，照片取出來後，建議給予分類、命名，這樣 AI 生成的結果會更好。</p>
</blockquote>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-12.webp" width="1024" height="644" alt="生成個人形象網頁（圖 12）" loading="lazy" decoding="async"></p>
<p>下面我們把生成網頁，要參考的文字、圖片資料夾拖到與 AI 的對話，然後貼上下面指令：</p>
<pre tabindex="0"><code>建立一個「personal-website」資料夾，我想要用 React 框架，設計一個個人形象網頁。
網頁一定要呈現的頁面如下：
- 頂部: 有個人形象照與基礎資訊
- 擅長領域: 切換不同領域時更換對應顏色
- 個人成就: 加上互動效果與圖片
- 課程資訊: 以卡片顯示，含說明與價格
- 聯絡洽詢: 頁面最下方
設計重點:
- RWD 響應式設計
- 有一致的色系規範
- 搭配對應圖片（請複製到專案並用相對路徑）
- 互動效果與視覺化呈現（例如 hover、切換）
整體水準:
- 高度專業感
- 資訊重點清晰
- 圖片長寬比例需考量版面配置
</code></pre><p>這段指令除了一開始有指定使用的<strong>前端框架為 React </strong>外，下面有分成 3 塊指引：</p>
<ol>
<li>首先我跟他說明頁面要呈現的資訊</li>
<li>接著提醒設計要注意的重點</li>
<li>最後則是放上一些額外的需求</li>
</ol>
<p>然後稍等一段時間，個人形象網頁的初版就完成了：</p>
<div class="gallery-row cols-2">

<figure class="figure"><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-13.webp" width="1400" height="713" alt="生成個人形象網頁（圖 13）" fetchpriority="high" decoding="async">
</figure>

<figure class="figure"><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-14.webp" width="1400" height="713" alt="生成個人形象網頁（圖 14）" loading="lazy" decoding="async">
</figure>


</div>

<blockquote class="pullquote"><p>但還是要提醒大家，AI 只是加速製作網頁的過程，你要自己去確認細節是否符合自己的需求。</p>
</blockquote>
<p>像是基本的文字描述、圖片擺放是否恰當，以及 RWD 的設計是否完善等等。</p>
<p><strong>如果不知道在哪新增圖片、或是文字大小不知道怎麼調整，可以直接向 AI 詢問。</strong></p>
<p>如果生成網頁的過程遇到 Bug，出現一堆紅字，那也非常正常。</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-15.webp" width="1400" height="757" alt="生成個人形象網頁（圖 15）" loading="lazy" decoding="async"></p>
<p>你可以把錯誤訊息複製下來，貼到 AI 的對話窗，請他協助解決。</p>
<p><strong>這方法能解決大多數的基礎問題，但如果遇到的錯誤太多，或是邏輯上的問題，就需要根據實際情境來處理，這邊會再找時間寫一篇文章分享。</strong></p>
<hr>
<h2 class="h-nomark" id="-加入-git-版控vibe-coding-放心爆改">③ 加入 Git 版控，Vibe Coding 放心爆改<a class="h-anchor" href="#-%e5%8a%a0%e5%85%a5-git-%e7%89%88%e6%8e%a7vibe-coding-%e6%94%be%e5%bf%83%e7%88%86%e6%94%b9" aria-label="這個段落的連結"></a></h2>
<p>Vibe Coding 時，你的每個指令都可能大幅調整專案的程式。</p>
<p>但 AI 修改的結果未必是你要的，甚至有時會把正常的功能給改壞了。</p>
<p>為了把改壞的內容救回來，我會建議大家安裝 Git，這個程式碼版本控制工具，並註冊 GitHub 帳號來管理專案。</p>
<h3 id="-安裝-git">安裝 Git<a class="h-anchor" href="#-%e5%ae%89%e8%a3%9d-git" aria-label="這個段落的連結"></a></h3>
<p>首先，我們可以到 <a href="https://git-scm.com/downloads">Git 官網下載</a>安裝檔</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-16.webp" width="1400" height="757" alt="安裝 Git（圖 16）" loading="lazy" decoding="async"></p>
<p>安裝好 Git 後，開啟 Cursor 終端機輸入指令 `git -v` 確認有正確安裝</p>
<p>接著用下面的指令來完成初始化設定，請自行調整成自己的英文名字與 email</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>git config --global user.name <span style="color:#a5d6ff">&#34;baobao&#34;</span>
</span></span><span style="display:flex;"><span>git config --global user.email <span style="color:#a5d6ff">&#34;baobao@gmail.com&#34;</span>
</span></span></code></pre></div><p>然後產生 SSH Key，這是為了確保這台電腦有更新專案的權限，這邊也請自行調整成自己的 mail</p>
<pre tabindex="0"><code>ssh-keygen -t ed25519 -C &#34;baobao@gmail.com&#34;
</code></pre><p>SSH Key 生成出來後，可以透過下面的指令顯示公鑰，這會在下一個步驟用到</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>cat ~/.ssh/id_ed25519.pub
</span></span></code></pre></div><h3 id="-註冊-github">註冊 GitHub<a class="h-anchor" href="#-%e8%a8%bb%e5%86%8a-github" aria-label="這個段落的連結"></a></h3>
<p>這邊我們來到 <a href="https://github.com/">GitHub 的官網</a>，你可以直接使用 Gmail 來註冊。</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-17.webp" width="1400" height="757" alt="註冊 GitHub（圖 17）" loading="lazy" decoding="async"></p>
<p>註冊完成後，我們到帳號右上角的 Settings</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-18.webp" width="1400" height="757" alt="註冊 GitHub（圖 18）" loading="lazy" decoding="async"></p>
<p>選擇側邊欄的「SSH and GPG Keys」，點擊「New SSH Key」來新增剛剛生成的公鑰</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-19.webp" width="1400" height="757" alt="註冊 GitHub（圖 19）" loading="lazy" decoding="async"></p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-20.webp" width="1400" height="757" alt="註冊 GitHub（圖 20）" loading="lazy" decoding="async"></p>
<p>接著建立一個新的 repository，用來儲存剛剛 AI 生成的網頁專案。</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-21.webp" width="1400" height="757" alt="註冊 GitHub（圖 21）" loading="lazy" decoding="async"></p>
<p>Repository name 可以自由輸入，這邊我打「personal-website」，Description 可保留空</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-22.webp" width="1400" height="757" alt="註冊 GitHub（圖 22）" loading="lazy" decoding="async"></p>
<p>如果你不想把這個 Repository 公開，可以在「Configuration」把 visibility 改成「Private」</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-23.webp" width="1400" height="757" alt="註冊 GitHub（圖 23）" loading="lazy" decoding="async"></p>
<h3 id="-把專案更新到-github">把專案更新到 GitHub<a class="h-anchor" href="#-%e6%8a%8a%e5%b0%88%e6%a1%88%e6%9b%b4%e6%96%b0%e5%88%b0-github" aria-label="這個段落的連結"></a></h3>
<p>接著回到剛剛 Cursor 幫我們生成的專案，在終端機輸入 <code>git init</code> 來初始化專案 git。</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-24.webp" width="1120" height="210" alt="把專案更新到 GitHub（圖 24）" loading="lazy" decoding="async"></p>
<p>然後回到網頁，複製第一行 <code>git add…</code> 貼到專案的終端機，這樣我們就可以把電腦的專案與 GitHub 上面的專案連結。</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-25.webp" width="1400" height="239" alt="把專案更新到 GitHub（圖 25）" loading="lazy" decoding="async"></p>
<p>然後點擊左上方的 Source Control，你可以手動在框框內輸入這次的更新內容，又或是點擊旁邊的星星按鈕，讓 AI 自動產生：</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-26.webp" width="1400" height="617" alt="把專案更新到 GitHub（圖 26）" loading="lazy" decoding="async"></p>
<p>確認文字描述符合自己的預期後，點擊 commit，就會在自己的電腦記錄這個變更；但如果想更新到雲端，你需要點擊 Push 才會成功喔！</p>
<p>Push 後我們回到 GitHub 網頁，刷新一下頁面，如果能看到專案的內容，就代表你成功了！</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-27.webp" width="1400" height="727" alt="把專案更新到 GitHub（圖 27）" loading="lazy" decoding="async"></p>
<p>接著回到專案，嘗試與 AI 提出一個修改的需求</p>
<pre tabindex="0"><code>我希望可以有 Dark Mode 與 Light Mode 的設計
</code></pre><p>等 AI 執行完畢後，你可以在 Source Control 這個地方看到 Vibe Coding 更新的內容。</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-28.webp" width="1400" height="820" alt="把專案更新到 GitHub（圖 28）" loading="lazy" decoding="async"></p>
<p>如果發現他改壞了，後續對話也無法解決，你可以全部放棄變更！</p>
<p><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-29.webp" width="1400" height="820" alt="把專案更新到 GitHub（圖 29）" loading="lazy" decoding="async"></p>
<p>這邊我再給他一個要調整的內容</p>
<pre tabindex="0"><code>1. 形象照的圖片顯示上半部就好
2. 最上方個人簡介區塊下面要有留白
3. 我的成就裡面的圖片，可以根據不同比例完整顯示，要上下左右置中，多個地方用透明顯示
4. 職涯發展顧問、職涯發展的顏色太淡，不好辨識
</code></pre><p>如果對這次的調整滿意，就提交並發布一版保存；提交我們的 commit，點擊同步變更後他就會提交到 GitHub 雲端上面，以上是最基礎的 Git 操作。</p>
<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>git init：在目前資料夾初始化 git
</span></span><span style="display:flex;"><span>git clone &lt;repo-url&gt;：將遠端的專案下載到電腦
</span></span><span style="display:flex;"><span>git checkout &lt;branch&gt;：切換到指定分支
</span></span><span style="display:flex;"><span>git checkout -b &lt;branch&gt;：建立並切換到新分支
</span></span><span style="display:flex;"><span>git merge &lt;branch&gt;：將指定分支合併到當前分支
</span></span><span style="display:flex;"><span>git stash：暫存目前變更
</span></span><span style="display:flex;"><span>git stash pop：取回並套用暫存變更
</span></span><span style="display:flex;"><span>git push origin &lt;branch&gt;：將本地分支推送到遠端
</span></span><span style="display:flex;"><span>git pull origin &lt;branch&gt;：拉取遠端分支並合併
</span></span><span style="display:flex;"><span>git fetch：抓取遠端最新狀態
</span></span></code></pre></div><p>如果不知道指令怎麼下，別忘記有 AI 這個好夥伴可以詢問～</p>
<hr>
<h2 id="vibe-coding-的工具很重要但電腦品質也不能太差">Vibe Coding 的工具很重要，但電腦品質也不能太差<a class="h-anchor" href="#vibe-coding-%e7%9a%84%e5%b7%a5%e5%85%b7%e5%be%88%e9%87%8d%e8%a6%81%e4%bd%86%e9%9b%bb%e8%85%a6%e5%93%81%e8%b3%aa%e4%b9%9f%e4%b8%8d%e8%83%bd%e5%a4%aa%e5%b7%ae" aria-label="這個段落的連結"></a></h2>
<p>在舉辦幾場 Vibe Coding 的工作坊後；我發現一件特別的事，明明指令相同，有些學員可以很快取得期待的結果，而有些學員則是很容易卡住。</p>
<p>一開始我以為是運氣問題，但深入討論後，<strong>發現瓶頸其實是出在電腦的硬體規格上面。</strong></p>
<p>因為 Vibe Coding 會需要索引專案、執行指令、編譯程式，假如電腦的記憶體、CPU，以及硬碟的配置較差。</p>
<p>那你執行的每一步都要會花更多的時間，有時不是 AI 做不出來，只是速度慢到你以為他卡住了。</p>
<p>其實電腦也不需要買多好的，我前陣子買了一台一萬八的 Windows 電腦，CPU 是 Intel i7、記憶體 16 GB、硬碟用 SSD，跑起來就很夠用了。</p>
<hr>
<h2 id="結語掌握讓-vibe-coding-效率翻倍的工具">結語：掌握讓 Vibe Coding 效率翻倍的工具<a class="h-anchor" href="#%e7%b5%90%e8%aa%9e%e6%8e%8c%e6%8f%a1%e8%ae%93-vibe-coding-%e6%95%88%e7%8e%87%e7%bf%bb%e5%80%8d%e7%9a%84%e5%b7%a5%e5%85%b7" aria-label="這個段落的連結"></a></h2>
<p>最後來回顧一下今天分享的 3 個工具：</p>
<ol>
<li>我們可以透過 Python 幫我們讀取不同格式的文件內容，甚至用網路爬蟲取得詳細資訊。</li>
<li>安裝 Node.js 後，我們可以使用最流行前端框架，打造更專業、漂亮的網站。</li>
<li>有了 Git 協助版本控管後，我們就可以用 Vibe Coding 大膽嘗試創意的想法</li>
</ol>
<p><strong>安裝這些工具不是為了讓你變成程式設計師，而是讓 AI 有更多武器來幫你解決問題。</strong></p>
<p>看到這裡，大家應該可以感受到 Vibe Coding 的可能性與便利。</p>
<blockquote class="pullquote"><p>但還是要提醒大家，Vibe Coding 並不是完全零門檻的事情。</p>
</blockquote>
<p>在實務上，當問題變得更複雜，或需要跨領域整合時，專業知識仍然是必要的。</p>
<p>像今天分享的這些工具，對沒有資訊背景的人來說，可能都是知識盲區。</p>
<blockquote class="pullquote"><p>AI 能做到哪些事情，其實是取決於你對這個世界的認知。</p>
</blockquote>
<p>希望今天的分享，能讓你使用 Cursor 做 Vibe Coding 時，獲得更好的體驗。</p>
<p>如果你對 AI 工具、自我成長、職涯發展感興趣，<a href="https://dean-lin.medium.com/subscribe">歡迎追蹤我</a>！我會我會持續分享新的觀點 💡</p>
<figure class="figure"><img src="https://deanlin.net/blog/202509/cursor-productivity-extensions/images/cursor-productivity-extensions-30.webp" width="1400" height="914" alt="林鼎淵著作《工程師下班有約：企業內訓講師帶你認清職涯真相！》" loading="lazy" decoding="async">
  <figcaption><a href="https://www.tenlong.com.tw/products/9786264142083">https://www.tenlong.com.tw/products/9786264142083</a></figcaption>
</figure>

<a class="linkcard" href="https://deanlin.net/categories/ai/">
  <span class="lc-body">
    <span class="lc-title">AI 實戰</span>
    <span class="lc-desc">實測生成式 AI 工具、Vibe Coding 與自動化流程的第一手心得，把 AI 變成每天都用得上的即戰力。</span>
    <span class="lc-site"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 12h14M13 6l6 6-6 6"/></svg>林鼎淵 Dean Lin</span>
  </span>
</a>

]]></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>
    <item>
      <title>【Day7】gitignore - 杜絕上傳錯誤資料，從此不再發生慘痛經驗</title>
      <link>https://deanlin.net/blog/202009/fb-ig-crawler-day-07/</link>
      <pubDate>Tue, 22 Sep 2020 08:42:57 +0800</pubDate>
      <guid>https://deanlin.net/blog/202009/fb-ig-crawler-day-07/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>技術教學</category>
      <description>筆者曾待過超瞎的公司，他們對於一個專案遷移的概念還停留在把程式 copy 到 USB，到現場的時候再把他放到正式的server上面</description>
      <media:content url="https://deanlin.net/blog/202009/fb-ig-crawler-day-07/images/cover_hu_b2a7e541e66be6d6.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<blockquote>
<p>在你的成長的路上總有不少值得你警惕的前輩</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>
<h3 id="慘痛經驗-part-1">慘痛經驗 part 1<a class="h-anchor" href="#%e6%85%98%e7%97%9b%e7%b6%93%e9%a9%97-part-1" aria-label="這個段落的連結"></a></h3>
<p>筆者曾待過超瞎的公司，他們對於一個<mark>專案遷移的概念還停留在把程式 copy 到 USB</mark>，到現場的時候再把他放到正式的server上面</p>
<p>所以每次發布新版本都超級心驚膽跳擔心會不會檔案沒有 call 完全(如果你曾經在 windows 上複製過 node_modules 超過 2G 的專案就會知道我在說什麼惹)、會不會到現場的 server 跑不動，這個詭異的問題直到我離開那間公司後才知道根本是一道假命題&hellip;</p>
<ul>
<li><mark>都用 git 了，為什麼還要把程式 call 到 USB？？？</mark></li>
<li><code>都有 package.json 紀錄要安裝的套件跟版本了，我幹嘛要複製好幾G的套件進去 USB？？？</code><br>不要笑，我相信現在還是有公司用這麼瞎的方式在發布新版本XD</li>
</ul>
<h3 id="慘痛經驗-part-2">慘痛經驗 part 2<a class="h-anchor" href="#%e6%85%98%e7%97%9b%e7%b6%93%e9%a9%97-part-2" aria-label="這個段落的連結"></a></h3>
<p>筆者曾在公司兼職 MIS，幫公司架一個 gitlab 提供內部使用；但每個人 git 使用的習慣相差很大，有些部門的同事根本就沒在管什麼檔案適合傳到 gitlab 什麼不適合，每次 push 都全部上傳(各種執行檔、暫存檔全部上傳，<mark>根本把 gitlab 當成 NAS 在用&hellip;</mark>)</p>
<p>因為 git 版本控管的特性，他的專案在 gitlab 就越來越肥，儘管跟他溝通很多次這樣的 git 版控很有問題但都被當成耳邊風，直到有一天 gitlab 的硬碟終於被他用完了&hellip;(<mark>他一個專案就用了 15GB 的容量</mark>)，他才開始願意去了解自己專案中有多少檔案是不需要上傳的</p>
<blockquote>
<p>PS.因為 gitlab 一般只會儲存程式碼，所以當時只劃分了 100GB 的硬碟空間</p>
</blockquote>
<h3 id="慘痛經驗-part-3">慘痛經驗 part 3<a class="h-anchor" href="#%e6%85%98%e7%97%9b%e7%b6%93%e9%a9%97-part-3" aria-label="這個段落的連結"></a></h3>
<p>這個事件發生在一個熱愛技術的朋友身上，他使用了一個需要憑證的套件，這個憑證會根據使用者使用的次數去做收費，不知道他當時是喝多了還是太累了；<mark>他居然把憑證加入 git 版控上傳，我永遠記得下個月他收到帳單時臉上的表情有多麼的驚嚇</mark></p>
<h3 id="昨日經驗">昨日經驗<a class="h-anchor" href="#%e6%98%a8%e6%97%a5%e7%b6%93%e9%a9%97" aria-label="這個段落的連結"></a></h3>
<p>昨天我們說到 <code>.env 裡面存放的資料有許多都不適合公開</code>(ex:資料庫帳號密碼、token&hellip;)，這些資料外流出去我想就不是檢討報告能解決的問題惹，為了避免誤傳檔案，今天我來介紹一個好用的東西 <code>.gitignore</code>，他是一份忽略清單，<mark>忽略清單上的都是不需要加入版本控制的檔案</mark></p>
<hr>
<h2 id="今日目標">今日目標<a class="h-anchor" href="#%e4%bb%8a%e6%97%a5%e7%9b%ae%e6%a8%99" aria-label="這個段落的連結"></a></h2>
<ol>
<li>了解哪些檔案/資料夾不需要放入版控</li>
<li>在專案加入 .gitignore</li>
<li>透過 VSCode 知道是否成功將檔案加入忽略清單</li>
<li>為環境變數加上一個可以上傳的範例檔</li>
</ol>
<hr>
<h2 class="h-nomark" id="1-哪些檔案資料夾不需要放入版控">1. 哪些檔案/資料夾不需要放入版控?<a class="h-anchor" href="#1-%e5%93%aa%e4%ba%9b%e6%aa%94%e6%a1%88%e8%b3%87%e6%96%99%e5%a4%be%e4%b8%8d%e9%9c%80%e8%a6%81%e6%94%be%e5%85%a5%e7%89%88%e6%8e%a7" aria-label="這個段落的連結"></a></h2>
<p>有了上方慘痛經驗的範例，我想大家應該對要加入 .gitignore 的檔案/資料夾有基礎概念了，在這我也整理了常見在忽略清單如下：</p>
<ol>
<li><strong>機敏性資料</strong>：資料庫帳號密碼、存取權限的權杖(token)、憑證(credentials)&hellip;</li>
<li><strong>環境變數</strong>：專案env檔(因為裡面通常存有ip、password&hellip;等隱私資訊)</li>
<li><strong>套件資料夾</strong>：node_module、vendor&hellip;</li>
<li><strong>日誌檔案</strong>：log相關紀錄</li>
<li><strong>程式編譯時產生的檔案</strong>：快取檔案、暫存檔案、編譯結果</li>
</ol>
<p>透過這份清單，大家可以想一下昨天的專案有哪些檔案/資料夾是要加入這份忽略清單的呢</p>
<hr>
<h2 class="h-nomark" id="2-在專案加入gitignore">2. 在專案加入.gitignore<a class="h-anchor" href="#2-%e5%9c%a8%e5%b0%88%e6%a1%88%e5%8a%a0%e5%85%a5gitignore" aria-label="這個段落的連結"></a></h2>
<ol>
<li>上一篇有提到我們這次的爬蟲會用到 FB &amp; IG 的帳號密碼還有你 google sheet 的 id，<mark>這些資訊我們統一設定在 .env 環境變數裡面</mark>，我相信大家都不希望把這些機敏資訊放到 git 外流出去</li>
<li>另外我們 <code>透過 yarn 安裝的 dotenv 套件也產生了一個 node_modules 的資料夾</code>，從經以後你所安裝的套件都會儲存到這個資料夾裡面，通常一個中型專案套件他的大小都高達 300MB 以上，所以這個 node_modules 的資料夾是不適合上傳到到 git 的(這些套件到新環境下指令yarn就能安裝)</li>
</ol>
<p>所以我們的忽略清單會長這樣</p>
<h3 id="gitignore">.gitignore<a class="h-anchor" href="#gitignore" aria-label="這個段落的連結"></a></h3>
<pre tabindex="0"><code>node_modules
.env
</code></pre><hr>
<h2 class="h-nomark" id="3-透過-vscode-知道是否成功將檔案加入忽略清單">3. 透過 VSCode 知道是否成功將檔案加入忽略清單<a class="h-anchor" href="#3-%e9%80%8f%e9%81%8e-vscode-%e7%9f%a5%e9%81%93%e6%98%af%e5%90%a6%e6%88%90%e5%8a%9f%e5%b0%87%e6%aa%94%e6%a1%88%e5%8a%a0%e5%85%a5%e5%bf%bd%e7%95%a5%e6%b8%85%e5%96%ae" aria-label="這個段落的連結"></a></h2>
<p>如果你也是用 VSCode 當成編輯器，可以用他觀察使用 .gitignore 的前後變化</p>
<ul>
<li>
<p><strong>使用 .gitignore 前：</strong> .env 及 node_modules 會被列入變更；<code>綠色的字代表有新增(U)的檔案，棕色的字代表有改變(M)的檔案</code></p>
<p><img src="https://deanlin.net/blog/202009/fb-ig-crawler-day-07/images/fb-ig-crawler-day-07-01.webp" width="439" height="640" alt="Imgur" fetchpriority="high" decoding="async"></p>
</li>
<li>
<p>在 <code>SOURCE CONTROL</code> 中可以看到有哪些檔案被列入變更</p>
<p><img src="https://deanlin.net/blog/202009/fb-ig-crawler-day-07/images/fb-ig-crawler-day-07-02.webp" width="354" height="640" alt="Imgur" loading="lazy" decoding="async"></p>
</li>
<li>
<p><strong>使用 .gitignore 後：</strong> .env 及 node_modules 會變成<code>淺灰色</code>，代表不會被列入變更</p>
<p><img src="https://deanlin.net/blog/202009/fb-ig-crawler-day-07/images/fb-ig-crawler-day-07-03.webp" width="437" height="640" alt="Imgur" loading="lazy" decoding="async"></p>
</li>
</ul>
<p><strong>這份忽略清單會隨著你專案的變動而調整</strong>，如果你在撰寫其他種類程式語言可以參考<a href="https://github.com/github/gitignore">github的官網</a>來調整自己的.gitignore</p>
<hr>
<h2 class="h-nomark" id="4-為環境變數加上一個可以上傳的範例檔">4. 為環境變數加上一個可以上傳的範例檔<a class="h-anchor" href="#4-%e7%82%ba%e7%92%b0%e5%a2%83%e8%ae%8a%e6%95%b8%e5%8a%a0%e4%b8%8a%e4%b8%80%e5%80%8b%e5%8f%af%e4%bb%a5%e4%b8%8a%e5%82%b3%e7%9a%84%e7%af%84%e4%be%8b%e6%aa%94" aria-label="這個段落的連結"></a></h2>
<p>今天我們把 .env 放入 .gitignore 中讓他不會加入版控，<code>但為了讓專案快速遷移，我會建立一個 .env.example 的檔案</code>，他是環境變數的範例檔，這樣你在新環境只需要將他複製一份到 .env 檔填上自己的參數就能完成環境設定了，下面是本專案未來會用到的環境變數</p>
<h3 id="envexmaple">.env.exmaple<a class="h-anchor" href="#envexmaple" aria-label="這個段落的連結"></a></h3>
<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><span style="color:#8b949e;font-style:italic">#填寫你目標放入的sheet id</span>
</span></span><span style="display:flex;"><span><span style="color:#79c0ff">SPREADSHEET_ID</span><span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">&#39;your sheet id&#39;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic">#你FB及IG的帳號密碼(建議用小帳號)</span>
</span></span><span style="display:flex;"><span><span style="color:#79c0ff">IG_USERNAME</span><span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">&#39;ig username&#39;</span>
</span></span><span style="display:flex;"><span><span style="color:#79c0ff">IG_PASSWORD</span><span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">&#39;ig password&#39;</span>
</span></span><span style="display:flex;"><span><span style="color:#79c0ff">FB_USERNAME</span><span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">&#39;fb username&#39;</span>
</span></span><span style="display:flex;"><span><span style="color:#79c0ff">FB_PASSWORD</span><span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">&#39;fb password&#39;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8b949e;font-style:italic">#這是設定排程的時間參數(目前預設每日22:30準時執行)</span>
</span></span><span style="display:flex;"><span><span style="color:#79c0ff">CRONJOB_TIME</span><span style="color:#ff7b72;font-weight:bold">=</span><span style="color:#a5d6ff">&#39;0 30 22 * * *&#39;</span>
</span></span></code></pre></div><hr>
<h2 class="h-nomark" id="-下個階段">⏭️ 下個階段<a class="h-anchor" href="#-%e4%b8%8b%e5%80%8b%e9%9a%8e%e6%ae%b5" aria-label="這個段落的連結"></a></h2>
<p>關於撰寫程式的基礎介紹就到今天，從明天會開始<strong>撰寫爬蟲</strong>，這裡先跟各位分享一下我對於功能撰寫順序的邏輯以及技術文章未來的規劃</p>
<ul>
<li><strong>判斷哪個功能需要最先研究</strong>
<ol>
<li>我們先前列出很多功能項目，我個人對於研究的前後順序是<mark>先把不熟悉的完成，因為他通常會花你最多時間</mark></li>
<li>如果中間有遇到無法解決的問題，最慘的結果就是你必須放棄這個專案，所以我建議不熟悉的東西你最好再接案前要做一下功課確認是可以完成的，這就是你從最難的部分開始實作的好處：<mark>及時止損，避免你完成大部分功能最後因為卡在一個關鍵功能無法完成交付</mark></li>
</ol>
</li>
<li><strong>專案撰寫順序</strong><br>我會按照我當時撰寫的思路完整的呈現給大家，目前的順序是：
<ul>
<li>爬蟲功能 → 儲存到雲端Google Sheets → 電腦自動排程執行 → LINE通知提醒執行結果</li>
</ul>
</li>
</ul>
<hr>
<h2 id="ℹ-專案原始碼">ℹ️ 專案原始碼<a class="h-anchor" href="#%e2%84%b9-%e5%b0%88%e6%a1%88%e5%8e%9f%e5%a7%8b%e7%a2%bc" aria-label="這個段落的連結"></a></h2>
<p>今天的完整程式碼可以在<a href="https://github.com/dean9703111/ithelp_30days/tree/master/day7">這裡</a>找到喔</p>
<hr>
<blockquote>
<p><img src="https://deanlin.net/blog/202009/fb-ig-crawler-day-07/images/fb-ig-crawler-day-07-04.webp" width="1024" height="233" alt="ℹ️ 專案原始碼（圖 4）" loading="lazy" decoding="async"></p>
<p><strong>在許多人的幫助下，本系列文章已出版成書，並添加了新的篇章與細節補充：</strong></p>
<ul>
<li>加入更多實務經驗，用完整的開發流程讓讀者了解專案每個階段要注意的事項</li>
<li>將爬蟲的步驟與技巧做更詳細的說明，讓讀者可以輕鬆入門</li>
<li>調整專案架構
<ul>
<li>優化爬蟲程式，以更廣的視角來擷取網頁資訊</li>
<li>增加資料驗證、錯誤通知等功能，讓爬蟲執行遇到問題時可以第一時間通知使用者</li>
<li>排程部分改用 node-schedule &amp; pm2 的組合，讓讀者可以輕鬆管理專案程序並獲得更精確的 log 資訊</li>
</ul>
</li>
</ul>
<p><strong>有興趣的朋友可以到天瓏書局選購，感謝大家的支持。</strong></p>
<p><strong>購書連結</strong>：<a href="https://www.tenlong.com.tw/products/9789864348008">https://www.tenlong.com.tw/products/9789864348008</a></p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>【Day2】開發環境大補帖 - Node.js、NVM、git、yarn、VSCode</title>
      <link>https://deanlin.net/blog/202009/fb-ig-crawler-day-02/</link>
      <pubDate>Thu, 17 Sep 2020 08:45:35 +0800</pubDate>
      <guid>https://deanlin.net/blog/202009/fb-ig-crawler-day-02/</guid>
      <dc:creator>林鼎淵</dc:creator>
      <category>技術教學</category>
      <description>因為我自己在剛接觸程式時最痛恨的就是環境設定 不知道是我跟電腦不合還是怎樣，每次我學新東西的時候總是在環境設定這個環節卡的不要不要的 為了避免讀者在之後實戰的文章中一邊看一邊心理罵:「為什麼我們程式一模一樣但我的就是會錯?」這樣的憾事發生，所以我決定詳細的說明這個專案所需安裝的一…</description>
      <media:content url="https://deanlin.net/blog/202009/fb-ig-crawler-day-02/images/cover_hu_465e72a912eb2f9.jpg" medium="image" type="image/jpeg" width="1200" height="675" />
      <content:encoded><![CDATA[<blockquote>
<p>工欲善其事，必先利其器</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>因為我自己在<mark>剛接觸程式時最痛恨的就是環境設定</mark></p>
<p>不知道是我跟電腦不合還是怎樣，每次我學新東西的時候總是在環境設定這個環節卡的不要不要的</p>
<p>為了避免讀者在之後實戰的文章中一邊看一邊心理罵:「<strong>為什麼我們程式一模一樣但我的就是會錯?</strong>」這樣的憾事發生，所以我決定詳細的說明這個專案所需安裝的一切環境，並附上我本機安裝的工具版本，讓大家在日後的文章中可以順利操作與學習</p>
<blockquote>
<p>你們實際操作時通常都有新的版本了，如果最新版本有問題可以切換到筆者的版本來操作</p>
</blockquote>
<h2 id="今日目標">今日目標<a class="h-anchor" href="#%e4%bb%8a%e6%97%a5%e7%9b%ae%e6%a8%99" aria-label="這個段落的連結"></a></h2>
<ol>
<li>了解使用工具的重要性 &amp; 為什麼選擇他</li>
<li>完成開發前環境設定</li>
</ol>
<h2 id="使用什麼工具完成">使用什麼工具完成<a class="h-anchor" href="#%e4%bd%bf%e7%94%a8%e4%bb%80%e9%ba%bc%e5%b7%a5%e5%85%b7%e5%ae%8c%e6%88%90" aria-label="這個段落的連結"></a></h2>
<p>說到爬蟲，我想絕大多數的人第一個想到的一定是 python，python 是一個很好的語言，但很可惜我對他的鑽研不夠深入，如果這份外包<strong>使用一個自己不夠熟悉的語言來撰寫那是一個不負責任的行為</strong>，所以在這裡我選擇的語言是 javacscript</p>
<p>另外我會<strong>詳細說明前置環境的設定</strong>，如果每個人的環境設置都不一樣，那麼我文章的程式可能在許多電腦上都是無法執行的，所以<code>說明包含 windows/mac 兩個系統的設定</code>，讓你們了解到為什麼叫使用這些工具</p>
<ol>
<li>Node.js</li>
<li>NVM</li>
<li>git</li>
<li>yarn</li>
<li>VSCode</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/202009/fb-ig-crawler-day-02/images/fb-ig-crawler-day-02-01.webp" width="119" height="73" alt="Imgur" fetchpriority="high" decoding="async"></p>
<p>能夠在 server 端運行 JavaScript 的開放原始碼、跨平台 JavaScript 的執行環境。前端工程師的福音</p>
<blockquote>
<p>筆者安裝的版本：v12.19.0</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>
<ul>
<li>
<p><strong>windows 安裝步驟</strong></p>
<ol>
<li>
<p>先進入<a href="https://github.com/coreybutler/nvm-windows/releases">windows下載頁面</a></p>
</li>
<li>
<p>選擇最新版本的下載 <strong>nvm-setup.zip</strong>(筆者版本為1.1.7，你看到這篇文章時可能有提供更新的版本)</p>
<p><img src="https://deanlin.net/blog/202009/fb-ig-crawler-day-02/images/fb-ig-crawler-day-02-02.webp" width="1400" height="841" alt="Imgur" loading="lazy" decoding="async"></p>
</li>
<li>
<p>下載後一路瘋狂下一步即可</p>
</li>
<li>
<p>安裝後開啟命令提示字元(CMD)</p>
</li>
<li>
<p>在 CMD 輸入指令確認 nvm 是否安裝成功</p>
<pre tabindex="0"><code>nvm
</code></pre><blockquote>
<p><img src="https://deanlin.net/blog/202009/fb-ig-crawler-day-02/images/fb-ig-crawler-day-02-03.webp" width="1200" height="591" alt="Imgur" loading="lazy" decoding="async"></p>
</blockquote>
</li>
</ol>
</li>
<li>
<p><strong>mac 安裝步驟</strong></p>
<ol>
<li>
<p>打開終端機(Terminal)，以下步驟皆在終端機操作</p>
</li>
<li>
<p>mac 建議先下載 Homebrew</p>
<pre tabindex="0"><code>/bin/bash -c &#34;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)&#34;
</code></pre></li>
<li>
<p>下載後安裝 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></li>
<li>
<p>確認 nvm 是否安裝成功</p>
<pre tabindex="0"><code>nvm
</code></pre><blockquote>
<p><img src="https://deanlin.net/blog/202009/fb-ig-crawler-day-02/images/fb-ig-crawler-day-02-04.webp" width="1400" height="553" alt="Imgur" loading="lazy" decoding="async"></p>
</blockquote>
</li>
</ol>
</li>
<li>
<p><strong>常用指令</strong></p>
<ul>
<li>
<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:#ff7b72;font-weight:bold">[</span>version<span style="color:#ff7b72;font-weight:bold">]</span>
</span></span></code></pre></div><p>請切記要安裝一個 Node.js 版本(請選用<a href="https://nodejs.org/en/">LTS版本</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>nvm install 12.19.0
</span></span></code></pre></div></li>
<li>
<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 use <span style="color:#ff7b72;font-weight:bold">[</span>version<span style="color:#ff7b72;font-weight:bold">]</span>
</span></span></code></pre></div></li>
<li>
<p>列出本機(local)已經安裝好的 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 list
</span></span></code></pre></div></li>
<li>
<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 current
</span></span></code></pre></div></li>
</ul>
<blockquote>
<p>筆者安裝版本：1.1.7</p>
</blockquote>
</li>
</ul>
<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/202009/fb-ig-crawler-day-02/images/fb-ig-crawler-day-02-05.webp" width="200" height="84" alt="Imgur" loading="lazy" decoding="async"></p>
<p>這是對於程式版本控制的工具，透過他你可以輕鬆回到過去，並且在多人協作時也能有效管控</p>
<p><a href="https://git-scm.com/download/win">windows下載頁面</a>、<a href="https://git-scm.com/download/mac">mac下載頁面</a></p>
<blockquote>
<p>我有朋友使用 windows 怎麼樣都無法正常安裝 git，如果你也遇到了這個不幸，你還是有<a href="https://desktop.github.com/">Git桌面板</a>可以選擇的</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>
<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>git fetch
</span></span></code></pre></div></li>
<li>
<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>git pull
</span></span></code></pre></div></li>
<li>
<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>git push
</span></span></code></pre></div></li>
</ul>
<blockquote>
<p>筆者windows安裝版本：2.27.0.windows.1</p>
</blockquote>
<hr>
<h2 class="h-nomark" id="4-yarn-官網">4. yarn <a href="https://classic.yarnpkg.com/en/">官網</a><a class="h-anchor" href="#4-yarn-%e5%ae%98%e7%b6%b2" aria-label="這個段落的連結"></a></h2>
<p><img src="https://deanlin.net/blog/202009/fb-ig-crawler-day-02/images/fb-ig-crawler-day-02-06.webp" width="160" height="84" alt="Imgur" loading="lazy" decoding="async"></p>
<p>這是專門安裝套件的軟體，站在巨人的肩膀上你才能看得更遠，妥善運用別人提供的套件，程式的路能走得更遠</p>
<p><a href="https://classic.yarnpkg.com/en/docs/install#windows-stable">windows下載頁面</a>、<a href="https://classic.yarnpkg.com/en/docs/install#mac-stable">mac下載頁面</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>
<p>依據 package.json 安裝所有套件</p>
<pre tabindex="0"><code>yarn
</code></pre></li>
<li>
<p>安裝到 dependencies</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>yarn add <span style="color:#ff7b72;font-weight:bold">[</span>package<span style="color:#ff7b72;font-weight:bold">]</span>
</span></span></code></pre></div></li>
<li>
<p>安裝到 devDependencies</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>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></li>
<li>
<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>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></li>
</ul>
<blockquote>
<p>筆者安裝版本：1.19.2</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/202009/fb-ig-crawler-day-02/images/fb-ig-crawler-day-02-07.webp" width="80" height="80" alt="Imgur" loading="lazy" decoding="async"></p>
<p>現在已經過了用記事本在打程式的年代了，透過 IDE(整合開發環境)可以大幅增加你撰寫程式的速度</p>
<p><a href="https://code.visualstudio.com/">VScode下載頁面</a></p>
<h3 id="優點">優點<a class="h-anchor" href="#%e5%84%aa%e9%bb%9e" aria-label="這個段落的連結"></a></h3>
<ol>
<li>適合新手：不需在終端機(Terminal)安裝及設定各種前置作業，能節省建立開發環境的成本，並加速對開發環境的了解。</li>
<li>執行程式：可以在 IDE 內直接執行一段程式碼，不需離開編輯器。</li>
<li>程式碼高亮：將原始碼以不同顏色顯現，讓我們閱讀更方便。</li>
<li>程式碼自動格式化：當輸入 if 或 while 時，他會自動縮排。</li>
<li>版本控制方便：git add、git commit 有 GUI 可以操作，並且有 work tree 讓你比對自己更改了哪些地方</li>
<li>功能擴充方便：能透過 Extentions 來安裝所需要的擴充的套件</li>
</ol>
<h3 id="常用快捷鍵">常用快捷鍵<a class="h-anchor" href="#%e5%b8%b8%e7%94%a8%e5%bf%ab%e6%8d%b7%e9%8d%b5" aria-label="這個段落的連結"></a></h3>
<blockquote>
<p>以下為 mac 快捷鍵，windows 按鍵請自行轉換：cmd = ctrl, option = alt</p>
</blockquote>
<ul>
<li>區塊註解 cmd + k + c</li>
<li>區塊取消註解 cmd + k + u</li>
<li>區塊縮退 cmd + [</li>
<li>區塊縮進 cmd + ]</li>
<li>自動整理程式碼 option + shift + f</li>
</ul>
<p>今天對於專案的前置環境說明到這裡，如果環境設定上有什麼問題的話實屬正常，畢竟每個電腦的環境都有些許不同，可以先用 google 查詢看看喔～進入工程師的世界後<a href="http://stackoverflow.com/">stackoverflow</a>會是你最好的朋友</p>
<hr>
<blockquote>
<p><strong>筆者碎碎念</strong></p>
<p>在文章的最後分享一個心態，無論是面對工作還是外包都一樣</p>
<p>在面試工作或是談外包時要先衡量一下自己的實力</p>
<p>如果你即將要面對的工作(外包)已經遠遠超過了你的能力範圍</p>
<p>強烈建議你拒絕這個機會，不要把工作(外包)當成是一個給你練習基礎的地方</p>
<p>你的同事跟業主會恨你的</p>
<p>尤其是外包，如果你的基礎不穩，運氣好你可能會做出一個貌似可以用的專案</p>
<p>但實際上這個專案充滿著你所不知道的漏洞</p>
<p>這塊我想只有實際在業界磨練過一段時間才能比較感同身受</p>
</blockquote>
<h3 id="參考資源">參考資源<a class="h-anchor" href="#%e5%8f%83%e8%80%83%e8%b3%87%e6%ba%90" aria-label="這個段落的連結"></a></h3>
<ol>
<li><a href="https://ithelp.ithome.com.tw/articles/10217858">nvm：快速安裝、切換不同版本的 Node.js</a></li>
<li><a href="https://backlog.com/git-tutorial/tw/intro/intro1_1.html">連猴子都懂的Git入門指南</a></li>
<li><a href="https://hsiangfeng.github.io/nodejs/20200107/3738078915/">Windows 10 安裝並使用 nvm 切換 NodeJS 版本</a></li>
<li><a href="https://docs.f5ezcode.in/cs-basic/di-ba-zhang-gong-cheng-de-gong-ju/8.1-zheng-he-jing-ide">一應俱全的整合開發環境IDE</a></li>
<li><a href="https://ithelp.ithome.com.tw/articles/10191745">用Yarn取代npm加速開發</a></li>
</ol>
<hr>
<blockquote>
<p><img src="https://deanlin.net/blog/202009/fb-ig-crawler-day-02/images/fb-ig-crawler-day-02-08.webp" width="1024" height="233" alt="參考資源（圖 8）" loading="lazy" decoding="async"></p>
<p><strong>在許多人的幫助下，本系列文章已出版成書，並添加了新的篇章與細節補充：</strong></p>
<ul>
<li>加入更多實務經驗，用完整的開發流程讓讀者了解專案每個階段要注意的事項</li>
<li>將爬蟲的步驟與技巧做更詳細的說明，讓讀者可以輕鬆入門</li>
<li>調整專案架構
<ul>
<li>優化爬蟲程式，以更廣的視角來擷取網頁資訊</li>
<li>增加資料驗證、錯誤通知等功能，讓爬蟲執行遇到問題時可以第一時間通知使用者</li>
<li>排程部分改用 node-schedule &amp; pm2 的組合，讓讀者可以輕鬆管理專案程序並獲得更精確的 log 資訊</li>
</ul>
</li>
</ul>
<p><strong>有興趣的朋友可以到天瓏書局選購，感謝大家的支持。</strong></p>
<p><strong>購書連結</strong>：<a href="https://www.tenlong.com.tw/products/9789864348008">https://www.tenlong.com.tw/products/9789864348008</a></p>
</blockquote>
]]></content:encoded>
    </item>
  </channel>
</rss>
