簡體   English   中英

雲存儲時如何處理`node_modules`目錄?

[英]How do I handle the `node_modules` directory when cloud storage?

我有一個Node.js項目(實際上是一個Firebase項目),我在Google Drive上有代碼。 (我可以在這里使用例如Dropbox 。重要的是代碼文件是鏡像的。)

現在我也想在另一台計算機上開發這個項目。 我不明白如何處理node_modules目錄。 目前那里有驚人的 15 000 個文件。 我應該從鏡像中排除它們嗎?

或者這只是一個糟糕的設置?

由於 node_modules 文件夾是使用npm install命令創建的,因此您可以在上傳到 Google Drive 文件夾時完全排除該文件夾。

從另一台計算機獲取文件時,只需再次運行該命令即可在 node_modules 文件夾中安裝所有依賴項。

它真的是一個糟糕的設置。 建議使用版本控制系統來處理源代碼。

很少有版本控制系統是,

  • Github免費和開源 VCS,每個人都可以選擇查看和克隆存儲庫中的源代碼,或擁有私有存儲庫
  • 僅限Bitbucked私有存儲庫

在 VCS / Drive / Dropbox 中發布代碼時不包含node_modules文件夾。 所有模塊都將使用npm install重新npm install 但請確保所有必要的模塊都包含在 package.json 依賴項中。

例如,用戶 A在沒有 node_modules 的情況下在 VCS/Drive/Dropbox 中添加源。 一旦用戶 B獲得下載源的訪問權限。 他將下載並執行命令 npm install。 一旦安裝了所有模塊,node_modules 文件夾將在用戶 B機器中自動創建。

使用 dropbox 允許使用終端忽略文件/目錄,現在很容易做到。

我構建了一個節點 CLI Dropbox Ignore node_modules來很容易地做到這一點。

可悲的是,我知道您的痛苦,我現在還沒有找到任何解決方案,對於 Google Drive 和 OneDrive,我最喜歡的選擇。

我的項目文件夾有很多子文件夾,如源圖像、設計等。我希望這些文件夾同步到 OneDrive,但我的子文件夾(如 node_modules)也同步,我找不到避免這種情況的方法。

我使用 Git 作為源代碼,但我確實經常更換計算機(台式機和筆記本),僅依靠 Git 來執行此操作真的很痛苦。 我每次都得繼續克隆項目,有時我只想做一些培訓/實踐,我不想將其上傳到 Github。

也許使用像 Insync 這樣的第三方同步軟件會有所幫助。 我會嘗試使用他們的試用期來檢查。

這總是讓我對 Dropbox 感到困擾,因為選擇性同步很麻煩。 您必須選擇要排除的每個文件夾。 對 .dropboxignore 文件的請求太多了,但 Dropbox 不聽。 但我不知道是否有任何雲存儲可以提供此功能。

編輯:Dropbox 似乎正在開發目前處於測試階段的功能https://help.dropbox.com/en-us/files-folders/restore-delete/ignored-files

無論如何:使用 git 總是好的,但是如果您在多個設備上工作並且您不想在每次切換設備時提交和拉/推您的工作,那么您可以將您的 git 存儲在您的 Dropbox 中。 但是仍然有 node_modules 被同步了幾個小時。

為了解決這個問題,我構建了一個小函數,將 node_modules 移到 Dropbox 之外,然后創建指向它們的軟鏈接。 所以 Dropbox 只同步鏈接文件,而不是內容。

DROPNODE=/usr/local/node_modules_dropbox
init_dropnode() {
  if [ -d $DROPNODE ]; then
    mkdir -p $DROPNODE
  fi
}

dropnode(){
  bp=$DROPNODE/`basename "$PWD"`
  p=$bp/node_modules
  if [  -L "./node_modules" ]; then
    rm node_modules
    mkdir -p $p
  else
    if [ -d "./node_modules" ]; then
      mkdir -p $bp
      mv node_modules $p
    else
      mkdir -p $p
    fi
  fi
  ln -s $p node_modules
}

我把這些放在我的 .bash_profile 中,所以當我在一個項目文件夾中時,我只做dropnode並且麻煩在我的 Dropbox 之外。

免責聲明:這僅適用於 Linux/MacOs,您無需為每台計算機上的 node_modules 轉儲文件夾設置相同的路徑。 如果您將代碼安裝到 Docker 容器中,這將不起作用,因為符號鏈接被忽略。

我知道這個問題很老,但這是我在尋找有關此問題的指導時發現的。 使用 Dropbox 功能如何設置上面提到的兩個響應者忽略的 Dropbox 文件或文件夾,我寫了這個單行來遍歷我的整個 Dropbox 並標記所有.gitnode_modulespackages文件夾以被 Dropbox 忽略。 只需將括號之間的參數更改為您想要忽略的任何參數即可。 -o表示“或”,如果您想要多個匹配模式,則必須將其包含在匹配模式之間。 這是我在我的機器上使用的:

find ~/Dropbox \( -name 'packages' -o -name 'node_modules' -o -name '.git' \) | xargs xattr -w com.dropbox.ignored 1

這會在 Dropbox 中的每個文件夾中遞歸(假設它在~/Dropbox ,如果不是,則調整)並使用xargs在每個結果上調用xattr -w com.dropbox.ignored 1 ,如 Dropbox 支持頁面上的說明。 要撤消它,請保持find命令原樣並將-w com.dropbox.ignored 1替換為-d com.dropbox.ignored ,例如

find ~/Dropbox \( -name 'packages' -o -name 'node_modules' -o -name '.git' \) | xargs xattr -d com.dropbox.ignored

注意事項:

  1. 在我試過的一台機器上 100% 工作 (macOS Monterey)! 買者自負!
  2. 如果你添加一個新的 git 項目,你需要再次運行它,因為腳本只標記它發現的實際文件/文件夾被忽略,它不會對匹配find語句的任何未來文件夾做任何事情。
  3. 我不認為標記多次忽略的文件夾有什么害處,但也許有? 如果是這樣,那將與上面的第 2 點相關。

我的 Dropbox 文件夾中有 9.3GB 的文件,運行后,Dropbox 報告我只使用了 5.2GB! 由於我的免費帳戶最高為 8.6GB(推薦獎金),這解決了我的空間不足錯誤,並為我提供了大量剩余空間! 希望這對其他人有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM