云存储时如何处理`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 重新安装所有模块。但是请确保所有必需的模块都包含在 package.json 依赖项中。

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

遗憾的是,我知道您的痛苦,目前我还没有找到任何解决方案,Google Drive 和 OneDrive 是我最喜欢的选择。

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

我使用 Git 作为源代码,但我确实经常更换电脑(台式机和笔记本电脑),仅依靠 Git 来做这件事真的很痛苦。我每次都必须继续克隆项目,有时我只想做一些 training/practice,我不想将它上传到 Github。

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

这一直困扰着我使用 Dropbox,因为 selective 同步很麻烦。您必须 select 每个要排除的文件夹。对 .dropboxignore 文件的请求如此之多,但 Dropbox 不听。但是我不知道有没有云存储可以提供这个功能。

编辑:Dropbox 似乎正在开发目前处于测试阶段的功能 https://help.dropbox.com/en-us/files-folders/restore-delete/ignored-files

无论如何:使用 git 总是好的,但是如果您在多个设备上工作并且您不想在每次切换设备时提交和 pull/push 您的工作,那么您可以存储您的git 在您的 Dropbox 中。但是仍然有 node_modules 被同步了好几个小时却一无所获。

为了解决这个问题,我构建了一个小函数,将 node_modules 移出 Dropbox,然后为它们创建 softlinks。所以 Dropbox 只同步 link 文件,而不是内容。

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 容器中,这将不起作用,因为 symlinks 被忽略了。

Dropbox 允许 ignore files/directories 使用终端,现在很容易做到。

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

我知道这个问题很老,但这是我在寻求相关指导时发现的。使用 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,如果不是则进行调整)并使用 xargs 对每个结果调用 xattr -w com.dropbox.ignored 1,如 D​​ropbox 支持上的说明页。要撤消它,请保持 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 项目,您将需要再次 运行 这个,因为脚本只标记它发现被忽略的实际 files/folders,它不会'不对任何将来匹配 find 语句的文件夹做任何事情。
  3. 我不认为将文件夹标记为多次忽略有什么坏处,但也许有什么坏处?如果是这样,那将与上面的第 2 点相关。

我的 Dropbox 文件夹中有 9.3GB 的文件,在 运行 之后,Dropbox 报告我只使用了 5.1GB!由于我的免费帐户最大容量为 8.6GB(推荐奖金),这解决了我的 space 个错误,并给我留下了巨大的余地 space!希望这对其他人有帮助。