### GDSC NYUST x 資訊創客社 <br> ### 軟體開發工具入門讀書會 #### VS Code & Node.js課程 <br> #### 2023/10/18 ( Wed ) 19:00 - 21:00 #### 講師:蘇祐民 #### 本次課程影片: <img src="" height="200px"> --- # VSCode & Node.js *YoMin Su* --- ## 課程簡報 ---- ![](https://hackmd.io/_uploads/S1qoDxTZp.png) > URL: https://reurl.cc/jv9pXm --- ## 課程簡介 ---- ### 簡單的說 - 在上週的環境中開始進行JavaScript開發 - 透過VSCode對設計好的程式碼進行除錯 - 初探Node.js專案 ---- ### 今日目標 1. 安裝VSCode 2. 在VSCode中安裝 WSL/SSH 套件 3. 透過VSCode連線到目標機器 4. 在 WSL/VM 中安裝 Node.js 5. 介紹活動列中的各大項功能 6. 在VSCode中安裝 JS/TS 套件 7. 介紹Node.js 8. 透過VSCode對Node.js應用程式進行除錯 9. 介紹Node.js專案與套件管理工具 10. 重點回顧與學習資源分享 --- ## 環境準備 ---- ### 安裝VSCode 總有人電腦中沒有,所以跟著來操作: Windows ```shell= winget install Microsoft.VisualStudioCode -i ``` <br/> macOS ```shell= brew install --cask visual-studio-code ``` > mac的同學若沒有brew,請[點我](https://code.visualstudio.com/docs/?dv=osx) ---- ### 在Linux環境中安裝Node.js 首先要進入到環境中,所以... ```shell= wsl bash ``` 在你的終端機中輸入上述任一項就可以了喔! ![](https://hackmd.io/_uploads/BkMTV-pba.png) ---- ### 安裝Node.js(2) 先回到家目錄: ```bash= cd ~ ``` 接著利用 Node.js 的Repo來安裝: ```bash= sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg sudo mkdir -p /etc/apt/keyrings curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg ``` > 上面的指令用於新增Repo的金鑰,為的是讓系統信任套件的簽名! ---- ### 安裝Node.js(3) 新增套件來源 (NODE_MAJOR 對應要的安裝版本) ```bash= NODE_MAJOR=20 echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list ``` 安裝開始: ```bash= sudo apt update && sudo apt install nodejs -y ``` ---- ### 驗證Node.js安裝 請輸入: ```bash= node -v ``` 會像下圖這個樣子(版本根據前面MAJOR而定) ![](https://hackmd.io/_uploads/S1OKSf6-p.png) ---- ### 啟用Corepack Corepack 是 Node.js 中用於管理『包管理器』的管理器 (Package Manager Manger) <br/> 啟用後就可以直接開始使用 ```bash= sudo corepack enable ``` ---- ### 驗證Corepack 啟用之前: ![](https://hackmd.io/_uploads/ByQWwf6bp.png) 啟用之後: ![](https://hackmd.io/_uploads/HynmwzT-T.png) --- ## VSCode 導覽 ---- ### 操作介面 ![](https://hackmd.io/_uploads/H1J5PzTZp.png) ---- ### 活動列 | | 名稱 | 用途 | | --------------------------------------------------- | ---------- | ------------------------ | | ![](https://hackmd.io/_uploads/S1U-OMT-a.png =50x) | 檔案總管 | 在專案中的各檔案來回游走 | | ![](https://hackmd.io/_uploads/BJuz_fTbT.png =50x) | 搜尋 | 在專案中進行全域搜尋 | | ![](https://hackmd.io/_uploads/r1UXOz6b6.png =50x) | 原始檔控制 | Git版本控管的圖形介面 | | ![](https://hackmd.io/_uploads/HJgEV_faWp.png =50x) | 執行與偵錯 | 除錯工具的部分 | | ![](https://hackmd.io/_uploads/S1gSdGaWT.png =50x) | 延伸模組 | 缺套件找這裡 | ---- ### 狀態列 ![](https://hackmd.io/_uploads/ryj89GaWa.png) ---- ### 狀態列左側:全域項目 ![](https://hackmd.io/_uploads/ryYH3zp-p.png) | 功能 | 描述 | | ------------ | ------------------------ | | 開啟遠端視窗 | 用於連接遠端目標 | | 版本控制 | 顯示目前分支與同步狀態 | | 問題偵測 | 用於顯示專案中是否有錯誤 | | 連接埠 | 用於顯示轉接的連接埠 | ---- ### 狀態列右側:上下文項目 ![](https://hackmd.io/_uploads/S1DD2faZa.png) | 功能 | 描述 | | ------------ | ------------------------ | | 行 / 欄 | 顯示光標當下在哪裡 | | 選擇縮排 | 顯示每次按下Tab的結果 | | 選取編碼 | 設定目前檔案的編碼格式 | | 選取行尾順序 | 設定檔案的換行規則 | | 選取語言模式 | 設定檔案的程式語言 | ---- ### 開啟專案 點選活動列的『檔案總管』,再按下『開啟資料夾』 ![](https://hackmd.io/_uploads/BknjaGpWp.png =400x) ---- ### 檢視專案資訊 ![](https://hackmd.io/_uploads/rkRmZ7aWp.png) ---- ### 版本控管資訊 ![](https://hackmd.io/_uploads/By6wWQTZa.png =500x) ---- ### 執行與偵錯 ![](https://hackmd.io/_uploads/rkS2W76bp.png) --- ## Node.js 教學時間 ---- ### 變數宣告 ![](https://hackmd.io/_uploads/B184zmab6.png) ```javascript= let // 區域變數 var // 全域變數 const // 常數 ``` ---- ### 資訊輸出 ![](https://hackmd.io/_uploads/Syi1m7p-T.png) ```javascript= console.log("放什麼都行"); ``` ---- ### 資訊輸入 ![](https://hackmd.io/_uploads/B18MV76b6.png) ```javascript= const stdin = process.openStdin(); //建立stdin物件 //加入事件監聽器,當輸入後,顯示輸入的資訊 stdin.addListener("data", (d) => { console.log(d.toString().trim()); }); ``` ---- ### 宣告方法 ![](https://hackmd.io/_uploads/S1GeHXabp.png =400x) ```javascript= function abc() { //標準宣告 console.log("xyz"); } let def = () => { //簡短宣告 console.log("ijk"); } ``` ---- ### JS物件 ![](https://hackmd.io/_uploads/SkZ3BQTWp.png =500x) 執行結果: ![](https://hackmd.io/_uploads/HyNTHQpZp.png =500x) ---- ### JS陣列 ![](https://hackmd.io/_uploads/S1hcLQT-a.png =500x) 執行結果: ![](https://hackmd.io/_uploads/BJAsL76ZT.png =500x) ---- ### Node.js 提供的資訊 印出來: ```javascript= console.log(process); ``` 直接看: ![](https://hackmd.io/_uploads/r1x68DQaZa.png =500x) ---- ### 來寫點東西試試 ```javascript= let student1 = { name: "John", age: 8 } let student2 = { name: "Cindy", age: 9 } let student3 = { name: "Jeff", age: 8 } let students = [] students.push(student1, student2, student3); let ages = students.map((s) => s.age); let total = 0; ages.forEach(a => { total += a; }); console.log(total); ``` --- ## JS 偵錯 ---- ### 中斷點 ![](https://hackmd.io/_uploads/By-MAQpZT.png =500x) 在行左側點一下,讓紅色點點出現 ---- ### 逐步執行 ![](https://hackmd.io/_uploads/rk1CC7Tbp.png =300x) | | 說明 | | ---------- | ------------------ | | 繼續 | 跳至下一個中斷點 | | 不進入函式 | 跳至下一個命令 | | 逐步執行 | 一條一條跑 | | 跳離函式 | 跳過函式內執行細節 | | 重新啟動 | 就是重新開始 | | 停止 | 結束偵錯 | --- ## JS 專案 ---- ### 初始化專案 ```bash= yarn init -2 ``` 執行後的資料夾: ![](https://hackmd.io/_uploads/S1UUg4pWp.png) ---- ### 專案定義檔 > package.json ```json= { "name": "Temp", "packageManager": "yarn@3.6.4" } ``` ---- ### 新增套件 ```bash= yarn add express ``` 完成後的package.json ```json= { "name": "Temp", "packageManager": "yarn@3.6.4", "dependencies": { "express": "^4.18.2" } } ``` ---- ### 如果是開發依賴 ```bash= yarn add -D @types/express ``` 完成後的package.json ```json= { "name": "Temp", "packageManager": "yarn@3.6.4", "dependencies": { "express": "^4.18.2" }, "devDependencies": { "@types/express": "^4.17.20" } } ``` ---- ### 加上自定義指令 假設想要執行檔案: ```json= "scripts": { "dev": "node src/index.js" } ``` 將上述加入到package.json中 ![](https://hackmd.io/_uploads/BkHjG4aZ6.png =500x) --- ## 學習資源 ---- - [MDN Web Docs](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript) - [Microsoft Learn 偵錯](https://learn.microsoft.com/zh-tw/training/modules/debug-nodejs/) - [Introduction | Yarn](https://yarnpkg.com/getting-started) --- ## Q & A 有什麼疑惑的嗎? --- ## 下一次課程 > Git & GitHub 分支控制、合併分支、Pull Request... --- ## Bye Bye (❁´◡\`❁)
{"title":"VS Code & Node.js課程","slideOptions":"{\"transition\":\"concave\",\"allottedMinutes\":100}","description":"YoMin Su","contributors":"[{\"id\":\"f8142aa2-66aa-4867-821d-2f1ffff7a7ba\",\"add\":6770,\"del\":26}]"}
    331 views
   Owned this note