云存储时如何处理“node_modules”目录?

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

提问人:Leo 提问时间:5/18/2018 更新时间:8/8/2022 访问量:6248

问:

我有一个项目(实际上是一个项目),我在其中有代码。(例如,我可以在这里使用。重要的是代码文件是镜像的。Node.jsFirebaseGoogle DriveDropbox

现在我也想在另一台计算机上开发这个项目。我不明白如何处理该目录。目前那里有惊人的 15 000 个文件。我应该将它们排除在镜像之外吗?node_modules

或者这只是一个糟糕的设置?

节点 .js Firebase Dropbox npm-安装

评论

2赞 Doug Stevenson 5/18/2018
为什么不对项目使用某种标准的源代码管理?云存储确实不是管理代码的最佳解决方案。
1赞 Leo 5/19/2018
谢谢@DougStevenson,但我现在有实际的理由这样做。当我发布项目时,我将使用源代码管理系统,但我一开始的编程方式是“呃,该死的,我需要再次重构”。
2赞 ryanm 7/31/2020
即使使用源代码管理,我也有这样的问题。原因是我可能在一台计算机上有正在进行的工作,然后转到另一台计算机并希望获取源代码管理之外的文件(例如 IntelliJ 配置文件夹)并同步正在进行的工作。这样做的一个关键是使IDE,操作系统和其他切向软件(如Node)保持(大致)相同的版本。

答:

4赞 Dan Tr R 5/18/2018 #1

由于node_modules文件夹是使用该命令创建的,因此您可以在上传到 Google Drive 文件夹时完全排除该文件夹。npm install

从另一台计算机获取文件时,只需再次运行该命令即可安装 node_modules 文件夹中的所有依赖项。

评论

8赞 Eric Majerus 8/11/2018
一个诀窍是在运行 npm install 之前手动添加 node_modules 文件夹,这样你就可以在它获得数十万个文件之前将其排除在同步之外
0赞 Daniel Danielecki 4/8/2021
不幸的是,@EricMajerus的伎俩不起作用。在这种情况下,只需删除本地文件夹:(OneDrive
1赞 Mike Willis 3/31/2022
@DanielDanielecki它对我有用,有点......删除文件夹后,我手动重新创建它,然后运行我的或其他任何内容。该文件夹已填充,但永远不会同步到云。请注意,这将抱怨并显示错误。不幸的是,经过几年的这样做,我显示了 40+ 这些错误,我认为这会导致同步其他文件/文件夹需要很长时间。OneDrivenpm initOneDriveOneDrive
1赞 Ashok JayaPrakash 5/18/2018 #2

这真的是一个糟糕的设置。建议使用版本控制系统来处理源代码。

很少有版本控制系统是,

  • Github的免费和开源VCS,每个人都可以访问在存储库中查看和克隆源代码,或拥有私有存储库的选项
  • 比特巴克仅限私有仓库

在VCS / Drive / Dropbox中发布代码时,请勿包含文件夹。所有模块都将使用 重新安装。但请确保所有必要的模块都包含在package.json依赖项中。node_modulesnpm install

例如,用户 A 在 VCS/Drive/Dropbox 中添加源而不node_modules。 一旦用户 B 获得下载源代码的权限。他将下载并执行命令 npm install。安装所有模块后node_modules文件夹将在用户 B 机器中自动创建。

评论

0赞 Leo 5/19/2018
谢谢,这就是我需要的。我不知道Bitbucket。这似乎是我目前想要的。npm install
9赞 Eric Majerus 8/11/2018
我不认为这是一个糟糕的设置。如果你有两台个人电脑(像我一样,一台台式机和一台笔记本电脑),有时我会离开我的台式机,留下我想在笔记本电脑上继续工作的未提交工作。我完成了,然后我提交并推送到 BItBucket。
7赞 Marcel Besixdouze 7/17/2020
版本控制与将本地/云备份用于工作区上的数据无关。这就像回答“你不应该使用RAID,而应该使用GitHub”,或者“你不应该在你的电脑中使用M.2固态硬盘,而是使用GitHub”。Non sequitur.
1赞 R. Marques 3/13/2019 #3

可悲的是,我知道你的痛苦,我现在还没有找到任何解决方案,对于 Google Drive 和 OneDrive,我最喜欢的选择。

我的项目文件夹有很多子文件夹,如源图像、设计等。 我希望这些文件夹同步到 OneDrive,但我的子文件夹(如node_modules)也同步,我找不到避免这种情况的方法。

我使用 Git 作为源代码,但我确实经常更换计算机(台式机和笔记本电脑),仅依靠 Git 来做到这一点真的很痛苦。我每次都不得不继续克隆项目,有时我只想做一些培训/练习,我不想把它上传到 Github。

也许使用像 Insync 这样的第三方同步软件会有所帮助。我会尝试使用他们的试用期来检查。

评论

0赞 Leo 3/14/2019
谢谢。我已经撤回到 Git。我想避免为此设置服务器,但我找到了解决方案。
1赞 R. Marques 10/29/2019
您可以尝试 InSync 等解决方案。我正在我的 Linux 笔记本和 Windows 桌面上使用它。与 Git 一样,您可以将 Insync 软件配置为忽略 .您可以选择不上传、不下载或两者兼而有之。可悲的是,这不是一个免费的解决方案,但至少它运行良好。node_modules
3赞 Martin Cup 2/7/2020 #4

这一直困扰着我使用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里,所以当我在一个项目文件夹中时,我只是这样做,麻烦就在我的Dropbox之外。dropnode

免责声明:这仅适用于 Linux/MacOs,您无需为每台计算机上的node_modules转储文件夹设置相同的路径。如果要将代码装载到 Docker 容器中,这将不起作用,因为符号链接将被忽略。

2赞 Trent 3/31/2020 #5

Dropbox允许使用终端忽略文件/目录,现在很容易做到。

我构建了一个节点 CLI Dropbox Ignore node_modules 来非常轻松地做到这一点。

0赞 Joel P. 11/8/2021 #6

我知道这个问题很老了,但这是我在寻求指导时发现的。使用 Dropbox 功能如何设置上面提到的两个响应者忽略的 Dropbox 文件或文件夹,我编写了这个单行来遍历我的整个 Dropbox,并标记所有 、 和 文件夹 Dropbox 要忽略。只需将括号之间的参数更改为您要忽略的任何参数即可。表示“或”,如果需要多个匹配模式,则必须包含在匹配模式之间。这是我在机器上使用的东西:.gitnode_modulespackages-o

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

这会递归遍 Dropbox 中的每个文件夹(假设它位于 ,如果没有,请调整),并用于调用每个结果,如 Dropbox 支持页面上的说明。要撤消它,请保持命令不变并替换为 ,例如~/Dropboxxargsxattr -w com.dropbox.ignored 1find-w com.dropbox.ignored 1-d com.dropbox.ignored

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

警告:

  1. 100% 适用于我尝试过的一台机器 (macOS Monterey)!警告 emptor!
  2. 如果你添加一个新的 git 项目,你需要再次运行它,因为脚本只标记它发现被忽略的实际文件/文件夹,它不会对任何与该语句匹配的未来文件夹做任何事情。find
  3. 我不认为多次标记忽略的文件夹有什么坏处,但也许有?如果是这样,那将与上面的 #2 点相关。

我的 Dropbox 文件夹中有 9.3GB 的文件,运行此文件夹后,Dropbox 报告我只使用了 5.1GB!由于我的免费帐户最大为 8.6GB(推荐奖金),这解决了我的空间不足错误,并给了我巨大的剩余空间!希望这对其他人有所帮助。

2022-08-08 更新:这在包含空格的路径上对我来说失败了,因为默认情况下 xargs 将任何空格视为分隔符。基于我在其他地方添加的这个答案,并在上面的命令中添加。 告诉 find 使用 null 而不是换行符,并告诉只使用 null 作为分隔符而不是所有空格。-print0-0-print0-0xargs