PROBLEM
Dropbox does not currently provide an ignore file/folder feature that enables a locally-unique instance to exist on each machine. One important use of this is the “node_moduels" folder used for node javascript development. The node_modules folder sees thousands of file changes during the development cycle. If this folder is allowed to sync, the important files you need (outside of it), are so far down in the sync queue that you never have the important files when you need them on your other systems.
SOLUTION
A better way to sync projects with Dropbox while ignoring the node_modules folder is to use a “properly” formed symlink (alias). At this time npm and yarn support a property formed symlink. HOWEVER, IT IS CRITICAL THAT THE LINK (ALIAS) AND TARGET HAVE THE SAME NAME!
From shell prompt (terminal):
- cd YOUR_PROJECT_NAME
- mkdir -p ~/Downloads/node_modules_for_YOUR_PROJECT_NAME
mv node_modules ~/Downloads/node_modules_for_YOUR_PROJECT_NAME
ln -s ~/Downloads/node_modules_for_YOUR_PROJECT_NAME/node_modules
Now create the same target node_moduels folder on each of your other systems **AFTER** Dropbox syncs the ENTIRE project direcotry. The old node_modules folder should be removed and the symlink (alias) added before running these steps.
- cd YOUR_PROJECT_NAME
- mkdir -p ~/Downloads/node_modules_for_YOUR_PROJECT_NAME/node_modules
- yarn install
Dropbox WILL sync the symlink/alias file itself, but NOT the contents it points to. This seems to work well for file syncing across several of your own development systems, and then use git to push to the repo for others on the team.
CAVEAT
The tiny symlink (alias) file itself IS sync’d on all systems, but will point to a non-existent / empty folder on the other systems. This is most applicable for a single user, but can also be useful for teams if an individual variant of the ignored data is appropriate, such as for node_moduels.
Hope this helps.
🙂
..sebastian