提问人:Leo 提问时间:5/18/2018 更新时间:8/8/2022 访问量:6248
云存储时如何处理“node_modules”目录?
How do I handle the `node_modules` directory when cloud storage?
问:
我有一个项目(实际上是一个项目),我在其中有代码。(例如,我可以在这里使用。重要的是代码文件是镜像的。Node.js
Firebase
Google Drive
Dropbox
现在我也想在另一台计算机上开发这个项目。我不明白如何处理该目录。目前那里有惊人的 15 000 个文件。我应该将它们排除在镜像之外吗?node_modules
或者这只是一个糟糕的设置?
答:
由于node_modules文件夹是使用该命令创建的,因此您可以在上传到 Google Drive 文件夹时完全排除该文件夹。npm install
从另一台计算机获取文件时,只需再次运行该命令即可安装 node_modules 文件夹中的所有依赖项。
评论
OneDrive
OneDrive
npm init
OneDrive
OneDrive
这真的是一个糟糕的设置。建议使用版本控制系统来处理源代码。
很少有版本控制系统是,
在VCS / Drive / Dropbox中发布代码时,请勿包含文件夹。所有模块都将使用 重新安装。但请确保所有必要的模块都包含在package.json依赖项中。node_modules
npm install
例如,用户 A 在 VCS/Drive/Dropbox 中添加源而不node_modules。 一旦用户 B 获得下载源代码的权限。他将下载并执行命令 npm install。安装所有模块后node_modules文件夹将在用户 B 机器中自动创建。
评论
npm install
可悲的是,我知道你的痛苦,我现在还没有找到任何解决方案,对于 Google Drive 和 OneDrive,我最喜欢的选择。
我的项目文件夹有很多子文件夹,如源图像、设计等。 我希望这些文件夹同步到 OneDrive,但我的子文件夹(如node_modules)也同步,我找不到避免这种情况的方法。
我使用 Git 作为源代码,但我确实经常更换计算机(台式机和笔记本电脑),仅依靠 Git 来做到这一点真的很痛苦。我每次都不得不继续克隆项目,有时我只想做一些培训/练习,我不想把它上传到 Github。
也许使用像 Insync 这样的第三方同步软件会有所帮助。我会尝试使用他们的试用期来检查。
评论
node_modules
这一直困扰着我使用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 容器中,这将不起作用,因为符号链接将被忽略。
Dropbox允许使用终端忽略文件/目录,现在很容易做到。
我构建了一个节点 CLI Dropbox Ignore node_modules 来非常轻松地做到这一点。
我知道这个问题很老了,但这是我在寻求指导时发现的。使用 Dropbox 功能如何设置上面提到的两个响应者忽略的 Dropbox 文件或文件夹,我编写了这个单行来遍历我的整个 Dropbox,并标记所有 、 和 文件夹 Dropbox 要忽略。只需将括号之间的参数更改为您要忽略的任何参数即可。表示“或”,如果需要多个匹配模式,则必须包含在匹配模式之间。这是我在机器上使用的东西:.git
node_modules
packages
-o
find ~/Dropbox \( -name 'packages' -o -name 'node_modules' -o -name '.git' \) -print0 | xargs -0 xattr -w com.dropbox.ignored 1
这会递归遍 Dropbox 中的每个文件夹(假设它位于 ,如果没有,请调整),并用于调用每个结果,如 Dropbox 支持页面上的说明。要撤消它,请保持命令不变并替换为 ,例如~/Dropbox
xargs
xattr -w com.dropbox.ignored 1
find
-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
警告:
- 100% 适用于我尝试过的一台机器 (macOS Monterey)!警告 emptor!
- 如果你添加一个新的 git 项目,你需要再次运行它,因为脚本只标记它发现被忽略的实际文件/文件夹,它不会对任何与该语句匹配的未来文件夹做任何事情。
find
- 我不认为多次标记忽略的文件夹有什么坏处,但也许有?如果是这样,那将与上面的 #2 点相关。
我的 Dropbox 文件夹中有 9.3GB 的文件,运行此文件夹后,Dropbox 报告我只使用了 5.1GB!由于我的免费帐户最大为 8.6GB(推荐奖金),这解决了我的空间不足错误,并给了我巨大的剩余空间!希望这对其他人有所帮助。
2022-08-08 更新:这在包含空格的路径上对我来说失败了,因为默认情况下 xargs 将任何空格视为分隔符。基于我在其他地方添加的这个答案,并在上面的命令中添加。 告诉 find 使用 null 而不是换行符,并告诉只使用 null 作为分隔符而不是所有空格。-print0
-0
-print0
-0
xargs
评论