背景

背景

我是一名前端开发人员,我将前端项目保存在 OneDrive 中。由于 Node.js 组织依赖项的方式,每个项目都有一个node_modules目录,其中包含数十兆字节的小文件,这些文件需要很长时间才能同步。

我该怎么做才能避免同步node_modules目录,同时将项目保留在 OneDrive 中?

答案1

我知道这是一个老问题,但我遇到了同样的问题。我遇到的解决方案是先创建一个空node_modules文件夹,然后将其与云同步。

空文件夹同步后,我进入

OneDrive 设置 → 选择文件夹

并取消选择该node_modules文件夹。

然后,当您npm install在项目根文件夹中运行时,OneDrive 将检测到与云中文件夹的内容发生冲突。它不会同步。

同步错误图片

这种方法的缺点是 OneDrive 会产生同步错误,但它似乎可以很好地满足我的需求。

答案2

背景

OneDrive 不允许按名称排除目录,这是不会很快改变

[OneDrive 代表对 UserVoice 请求的回应:] 目前还不行

有些人推荐在 OneDrive 设置中取消选中你不想同步的目录,但这变得不可能OneDrive 文件按需

解决方案

但是,您可以通过调整 Node.js 端的内容来解决这个问题。将node_modules目录设为文件符号链接到不同的地方:

# Open any place outside OneDrive
cd D:\node_dependencies
# Make a symlink target. After linking, node_modules for your project 
# will be installed here
mkdir node_modules_for_my_project

# Open the project directory
cd <the project directory>
# Make a *file* link from node_modules to the newly created directory.
# You will need to delete existing node_modules directory if it exists
cmd /C "mklink node_modules D:\node_dependencies\node_modules_for_my_project"

这里最重要的是你创建一个文件符号链接,不是目录一。OneDrive 不会识别和同步此符号链接,而 Node.js 将按预期使用它:

屏幕截图显示 npm install 和 Node.js 所需的工作符合预期

使用 OneDrive v17.3.7101.1018 和 OneDrive 文件按需功能进行了测试。

缺点

这不是一个通用的解决方案。它的缺点是 Explorer、Powershell 和其他工具不会将其识别node_modules为目录:

屏幕截图显示 Explorer 将 node_modules 显示为无法识别的文件,并带有快捷方式图标

但是,基于 Node.js 的代码编辑器可以很好地读取它:

展开了 node_modules 目录的 Visual Studio 代码屏幕截图

答案3

我发现最好的解决方案是在 OneDrive 文件夹之外创建一个“本地”文件夹,项目将保存在该文件夹内,所有模块都将安装在该文件夹中。这是实际的项目。

为了将其同步到 OneDrive,我手动创建一个“并行”文件夹,并使用“RoboCopy”仅复制我想要的内容。然后您可以安排此任务。

要忽略的文件和文件夹名称/通配符是从 .gitignore 文件中复制的

解决方案基于几篇文章:

安排RoboCopy任务和简单示例

Microsoft 的 RoboCopy 文档

您还可以使用 GUI 来创建要安排的 .bat 任务文件。微软的 GUI &ChoEazyCopy GUI 更好

答案4

阅读完这些提议的选项后,我最终决定将所有内容放在 OneDrive 之外,并使用 Robocopy 创建一个脚本,以便在项目文件夹发生变化时备份到 OneDrive。

就像是:

robocopy SOURCE DEST /mir /xd node_modules

相关内容