Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save wanyutang/f189b01142464ed421c593421cddf690 to your computer and use it in GitHub Desktop.

Select an option

Save wanyutang/f189b01142464ed421c593421cddf690 to your computer and use it in GitHub Desktop.

Node js 與 npm 版本衝突問題討論

type:: topic status:: doing star:: 5 relatgion:: #[[2024-09-13]], #[[TPI/TPIU/ Docker Compose run Node js 專案實作]], gist↗

  • #[[Google IDX]] Google IDX docker run node 專案設定.md.gist
  • tpi-push-notification-html.nodejs.git 本機 run 不起來 relation:: [[2024-09-13]]
    • 專案版本太舊
    • npm node pythone 套件版本互相影響
    • 要降版才能正常 run
    • 參考 AI 提供的 [[@Winny/Topic/Node js 與 npm 版本衝突問題討論]] 打算在本機使用 docker-compose.yml 放專案內 run UI 介面確認畫面 collapsed:: true
      • #[[@Winny/Fleeting/post]] 可以用 [[TPI/PUSH]] 專案裡的 UI html 為例編寫 [[TPI/TPIU/ Docker Compose run Node js 專案實作]]
      • [[TPI/PUSH/ Docker Compose run Node js 專案實作]]
        • 專案描述:
          • 本機 run 不起來,因為專案版本太舊,npm、node、Python 套件版本互相影響。
        • 解決方案:
          • 使用 docker-compose.yml 在本機運行 Node.js UI 專案,並驗證畫面。
          • 參考 AI 提供的 [[@Winny/Topic/Node js 與 npm 版本衝突問題討論]]。
        • 操作步驟:
          • 建立 docker-compose.yml,並確保使用正確版本的 Node.js 和 npm 套件。
        • 討論:
          • #[[@Winny/Fleeting/post]] 可以用 [[TPI/PUSH]] 專案裡的 UI html 為例進行測試。
  • 遇到的問題

    collapsed:: true
    • 在開發多個專案時,常常需要使用不同的 Node.js 和 npm 版本,尤其是老舊的專案可能需要特定的版本來正確運行。遇到的具體問題如下:
      • 舊專案無法使用最新的 Node.js 版本:有些舊專案需要非常舊的 Node.js 和 npm 版本,而新專案又依賴較新的版本。手動切換版本會很累人,且容易出錯。
      • npm 版本跟著 Node.js 變動:隨著 Node.js 版本的升降,npm 版本也隨之變動,可能導致舊專案的依賴衝突或打包失敗。
      • 多專案同時開發時頻繁切換環境麻煩:手動調整環境變數、切換 Node.js 版本,並且管理不同的 npm 版本會導致開發效率低下。
  • 解決方向

    collapsed:: true
    • 如何在不同專案間快速、無痛地切換 Node.js 和 npm 版本?
    • 是否能讓每個專案擁有獨立的環境,減少版本衝突?
    • 是否有更便捷的工具,能夠自動為每個專案切換版本而無需手動干預?
  • 解決的方案

    collapsed:: true
    • 方案 1:使用 nvm 自動化 Node.js 和 npm 管理

      • nvm (Node Version Manager) 是管理多個 Node.js 版本的利器,可以在專案間切換 Node.js 版本。然而,nvm 會安裝與 Node.js 版本對應的 npm 版本,無法直接控制 npm 的版本。
      • 步驟:
        • 安裝所需的 Node.js 版本:

          nvm install 12.18.3
        • 切換到專案所需的 Node.js 版本:

          nvm use 12.18.3
        • 手動調整 npm 版本(如需要):

          npm install -g npm@6.14.8
        • 自動化:在專案目錄中創建 .nvmrc 文件,指定所需的 Node.js 版本,並在進入專案時運行 nvm use 自動切換。

      • 優點:
        • 簡單有效,適合大部分情況。
        • 支持多個專案的 Node.js 版本管理。
      • 缺點:
        • 需要手動切換 npm 版本。
        • 切換不同專案時仍需手動執行一些命令。
    • 方案 2:本地安裝 npm 版本並使用 npx 執行

      • 可以為每個專案本地安裝不同的 npm 版本,這樣可以避免全局 npm 版本影響專案。配合 npx,可以輕鬆使用本地安裝的 npm。
      • 步驟:
        • 在專案中本地安裝所需的 npm 版本:

          npm install npm@6.14.8 --save-dev
        • 使用 npx 指定本地 npm 版本運行命令:

          npx npm install
      • 優點:
        • 不影響全局的 npm 版本。
        • 每個專案可以使用自己所需的 npm 版本。
      • 缺點:
        • 需要手動運行 npx
        • 本地安裝 npm 會占用一定空間。
    • 方案 3:使用 Volta 自動管理 Node.js 和 npm

      • Volta 是一個專門為解決 Node.js 和 npm 版本管理而設計的工具。它能夠自動根據專案的需求安裝和切換 Node.js 和 npm 版本,並且不需要手動管理 npm 版本。
      • 步驟:
        • 安裝 Volta:

          curl https://get.volta.sh | bash
        • 安裝專案所需的 Node.js 和 npm 版本:

          volta install node@12.18.3
          volta install npm@6.14.8
        • 進入專案時,Volta 會自動切換到正確的 Node.js 和 npm 版本,無需手動干預。

      • 優點:
        • 全自動化切換,無需手動操作。
        • 同時管理 Node.js 和 npm 版本。
        • 獨立於系統環境,無需全局安裝 Node.js。
      • 缺點:
        • 需要安裝 Volta,對於習慣 nvm 的開發者來說需要一點學習成本。
    • 方案 4:使用 Docker 虛擬化環境

      • 使用 Docker 可以將專案的依賴環境完全虛擬化,每個專案擁有自己的獨立環境,不會與系統的 Node.js 或 npm 版本衝突。這適合處理多語言、多版本環境的情況。
      • 步驟:
        • 為專案創建 Dockerfile,定義專案的 Node.js 和 npm 版本:

          FROM node:12.18.3
          WORKDIR /app
          COPY package*.json ./
          RUN npm install
          COPY . .
          CMD ["npm", "start"]
        • 使用 docker-compose 或直接運行 Docker 容器來啟動專案:

          docker build -t myapp .
          docker run -p 3000:3000 myapp
      • 優點:
        • 完全隔離的環境,解決了所有版本衝突問題。
        • 環境一致性,適合團隊合作或部署。
      • 缺點:
        • 配置和啟動成本較高,特別是對小型專案來說可能過於複雜。
        • 占用較多資源,對於開發者的電腦性能有要求。
  • 總結

    collapsed:: true
    • 如果你的專案僅涉及 Node.js 和 npm,且頻繁切換版本需求不大,nvm 配合手動安裝 npm 是最簡單有效的方案。
    • 如果你不想每次手動切換版本,Volta 是更自動化的解決方案,適合多專案同時開發的情況。
    • 如果你希望完全隔離開發環境,並且項目較大或有團隊協作需求,使用 Docker 虛擬化環境是最佳方案。
    • 對於臨時需求或不想影響全局 npm 版本的情況,使用本地安裝 npm 並通過 npx 運行 是不錯的選擇。
  • 各方案分析

    collapsed:: true
    • 方案 適用場景 學習成本 切換速度 資源消耗 推薦使用時間
      nvm 配合手動安裝 npm 單專案開發,需經常切換版本 短期開發或小型專案
      本地安裝 npm + npx 多專案切換,但不希望影響全局環境 長期開發、專案之間 npm 版本差異大
      Volta 頻繁切換專案,自動化需求高 長期開發,尤其是多專案
      Docker 需要環境完全隔離,團隊合作 大型專案或複雜環境需求
  • 參考來源

    collapsed:: true
  • 實作-以 Google IDX 搭配 Docker 方案實現依專案客制開發環境

    collapsed:: true
    • Google IDX(Integrated Development Experience)基於 Visual Studio Code (VSCode) 的架構和設計,目的是提供一個雲端的開發環境。這使得使用者可以享受到 VSCode 的許多功能,如語法高亮、代碼自動完成以及即時預覽,同時還能利用雲端計算的優勢,進行多使用者協作和跨平台開發。因此,Google IDX 繼承了 VSCode 的許多特性,但也針對特定的雲端開發需求進行了調整和優化。
    • 登入並進入 Google IDX 開發環境

      collapsed:: true
      • 登入 Google IDX

        • 前往 Google IDX 登入頁面:
        • 輸入以下資訊:
          • 電子郵件:使用已註冊的 Google 帳戶電子郵件
          • 密碼:輸入與電子郵件相關聯的密碼
        • 點擊 登入 按鈕以進入系統。
      • 進入開發環境

        • 登入成功後,您將進入 Google IDX 的主頁面。
        • 按照以下步驟進入開發環境:
          • 尋找並點擊「開發者選項」或「開發環境」的選項:
            • 通常位於側邊欄或主頁面中。
          • 選擇「建立新專案」或「進入現有專案」:
            • 根據需要選擇一個專案以進入開發環境。
        • 確認您在開發環境中的專案設定正確,然後開始進行開發。
      • 使用 IDE 進行開發

        • 在您的本地開發環境中使用相應的 IDE:
          • 將您的 Google IDX 專案克隆至本地環境。
          • 確保 Docker 環境運行正常。
        • 開始進行專案開發,並根據 Google IDX 的文檔進行必要的配置。
    • 安裝 Docker 套件與使用 Docker Compose

      • 安裝 Docker 套件

        • 開啟 VSCode。
        • 前往擴展市場:
          • 點擊側邊欄的 擴展 圖示(四個方塊的圖標)。
        • 搜尋 Docker 套件:
          • 在搜尋欄中輸入 Docker
        • 安裝 Docker 套件:
          • 找到由 Microsoft 開發的 Docker 套件。
          • 點擊 安裝 按鈕以安裝該擴展。
      • 使用 Docker Compose

        • 確保已安裝 Docker 與 Docker Compose:
          • 確認本地環境已安裝 Docker,並能使用 dockerdocker-compose 命令。
        • 創建 docker-compose.yml 文件:
          • 在專案根目錄中創建一個新的文件,命名為 docker-compose.yml
          • 編輯 docker-compose.yml,設定所需的服務:
            version: '3'
            services:
              web:
                image: nginx
                ports:
                  - "8080:80"
              db:
                image: mysql
                environment:
                  MYSQL_ROOT_PASSWORD: example
        • 啟動 Docker Compose:
          • 打開終端機(Terminal)。
          • 導航到 docker-compose.yml 所在的目錄。
          • 執行以下命令啟動服務:
            docker-compose up
        • 查看運行狀態:
          • 打開瀏覽器並訪問 http://localhost:8080 以查看運行的應用程序。
          • 使用 docker-compose ps 命令檢查運行的容器。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment