云存储时如何处理`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文件夹中。
这真是一个糟糕的设置。建议使用版本控制系统来处理源代码。
很少有版本控制系统,
在 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 并将所有 .git
、node_modules
和 packages
文件夹标记为 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
,如 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
注意事项:
- 在我试过的一台机器上 100% 都能正常工作 (macOS Monterey)!买者自负!
- 如果您添加一个新的 git 项目,您将需要再次 运行 这个,因为脚本只标记它发现被忽略的实际 files/folders,它不会'不对任何将来匹配
find
语句的文件夹做任何事情。
- 我不认为将文件夹标记为多次忽略有什么坏处,但也许有什么坏处?如果是这样,那将与上面的第 2 点相关。
我的 Dropbox 文件夹中有 9.3GB 的文件,在 运行 之后,Dropbox 报告我只使用了 5.1GB!由于我的免费帐户最大容量为 8.6GB(推荐奖金),这解决了我的 space 个错误,并给我留下了巨大的余地 space!希望这对其他人有帮助。
我有一个 Node.js
项目(实际上是一个 Firebase
项目),我在 Google Drive
上有代码。 (例如,我可以在这里使用 Dropbox
。重要的是代码文件是镜像的。)
现在我也想在另一台电脑上开发这个项目。我不明白如何处理 node_modules
目录。目前那里有数量惊人的 15 000 个文件。我应该将它们排除在镜像之外吗?
或者这只是一个错误的设置?
由于 node_modules 文件夹是使用 npm install
命令创建的,您可以在上传到 Google Drive 文件夹时完全排除该文件夹。
从另一台计算机上获取文件时,只需再次运行命令即可将所有依赖项安装到node_modules文件夹中。
这真是一个糟糕的设置。建议使用版本控制系统来处理源代码。
很少有版本控制系统,
在 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 并将所有 .git
、node_modules
和 packages
文件夹标记为 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
,如 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
注意事项:
- 在我试过的一台机器上 100% 都能正常工作 (macOS Monterey)!买者自负!
- 如果您添加一个新的 git 项目,您将需要再次 运行 这个,因为脚本只标记它发现被忽略的实际 files/folders,它不会'不对任何将来匹配
find
语句的文件夹做任何事情。 - 我不认为将文件夹标记为多次忽略有什么坏处,但也许有什么坏处?如果是这样,那将与上面的第 2 点相关。
我的 Dropbox 文件夹中有 9.3GB 的文件,在 运行 之后,Dropbox 报告我只使用了 5.1GB!由于我的免费帐户最大容量为 8.6GB(推荐奖金),这解决了我的 space 个错误,并给我留下了巨大的余地 space!希望这对其他人有帮助。